mirror of
https://github.com/moparisthebest/open-keychain
synced 2025-02-17 07:30:14 -05:00
Make PendingIntents with FLAG_CANCEL_CURRENT and FLAG_ONE_SHOT
This commit is contained in:
parent
0d5e99e1f0
commit
ec34597331
@ -384,9 +384,9 @@
|
|||||||
<activity
|
<activity
|
||||||
android:name=".remote.ui.RemoteServiceActivity"
|
android:name=".remote.ui.RemoteServiceActivity"
|
||||||
android:exported="false"
|
android:exported="false"
|
||||||
android:label="@string/app_name" />
|
android:label="@string/app_name"
|
||||||
<!--android:launchMode="singleTop"-->
|
android:launchMode="singleTop"
|
||||||
<!--android:process=":remote_api"-->
|
android:process=":remote_api" />
|
||||||
<activity
|
<activity
|
||||||
android:name=".remote.ui.AppsListActivity"
|
android:name=".remote.ui.AppsListActivity"
|
||||||
android:configChanges="orientation|screenSize|keyboardHidden|keyboard"
|
android:configChanges="orientation|screenSize|keyboardHidden|keyboard"
|
||||||
|
@ -23,6 +23,7 @@ import android.database.Cursor;
|
|||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.IBinder;
|
import android.os.IBinder;
|
||||||
import android.os.ParcelFileDescriptor;
|
import android.os.ParcelFileDescriptor;
|
||||||
|
|
||||||
import org.openintents.openpgp.IOpenPgpService;
|
import org.openintents.openpgp.IOpenPgpService;
|
||||||
import org.openintents.openpgp.OpenPgpError;
|
import org.openintents.openpgp.OpenPgpError;
|
||||||
import org.openintents.openpgp.OpenPgpSignatureResult;
|
import org.openintents.openpgp.OpenPgpSignatureResult;
|
||||||
@ -47,10 +48,6 @@ import java.util.ArrayList;
|
|||||||
|
|
||||||
public class OpenPgpService extends RemoteService {
|
public class OpenPgpService extends RemoteService {
|
||||||
|
|
||||||
private static final int PRIVATE_REQUEST_CODE_PASSPHRASE = 551;
|
|
||||||
private static final int PRIVATE_REQUEST_CODE_USER_IDS = 552;
|
|
||||||
private static final int PRIVATE_REQUEST_CODE_GET_KEYS = 553;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Search database for key ids based on emails.
|
* Search database for key ids based on emails.
|
||||||
*
|
*
|
||||||
@ -100,8 +97,9 @@ public class OpenPgpService extends RemoteService {
|
|||||||
intent.putExtra(RemoteServiceActivity.EXTRA_DUBLICATE_USER_IDS, dublicateUserIds);
|
intent.putExtra(RemoteServiceActivity.EXTRA_DUBLICATE_USER_IDS, dublicateUserIds);
|
||||||
intent.putExtra(RemoteServiceActivity.EXTRA_DATA, data);
|
intent.putExtra(RemoteServiceActivity.EXTRA_DATA, data);
|
||||||
|
|
||||||
PendingIntent pi = PendingIntent.getActivity
|
PendingIntent pi = PendingIntent.getActivity(getBaseContext(), 0,
|
||||||
(getBaseContext(), PRIVATE_REQUEST_CODE_USER_IDS, intent, 0);
|
intent,
|
||||||
|
PendingIntent.FLAG_CANCEL_CURRENT | PendingIntent.FLAG_ONE_SHOT);
|
||||||
|
|
||||||
// return PendingIntent to be executed by client
|
// return PendingIntent to be executed by client
|
||||||
Intent result = new Intent();
|
Intent result = new Intent();
|
||||||
@ -127,8 +125,9 @@ public class OpenPgpService extends RemoteService {
|
|||||||
intent.putExtra(RemoteServiceActivity.EXTRA_SECRET_KEY_ID, keyId);
|
intent.putExtra(RemoteServiceActivity.EXTRA_SECRET_KEY_ID, keyId);
|
||||||
// pass params through to activity that it can be returned again later to repeat pgp operation
|
// pass params through to activity that it can be returned again later to repeat pgp operation
|
||||||
intent.putExtra(RemoteServiceActivity.EXTRA_DATA, data);
|
intent.putExtra(RemoteServiceActivity.EXTRA_DATA, data);
|
||||||
PendingIntent pi = PendingIntent.getActivity
|
PendingIntent pi = PendingIntent.getActivity(getBaseContext(), 0,
|
||||||
(getBaseContext(), PRIVATE_REQUEST_CODE_PASSPHRASE, intent, 0);
|
intent,
|
||||||
|
PendingIntent.FLAG_CANCEL_CURRENT | PendingIntent.FLAG_ONE_SHOT);
|
||||||
|
|
||||||
// return PendingIntent to be executed by client
|
// return PendingIntent to be executed by client
|
||||||
Intent result = new Intent();
|
Intent result = new Intent();
|
||||||
@ -318,8 +317,9 @@ public class OpenPgpService extends RemoteService {
|
|||||||
intent.putExtra(RemoteServiceActivity.EXTRA_ERROR_MESSAGE, "todo");
|
intent.putExtra(RemoteServiceActivity.EXTRA_ERROR_MESSAGE, "todo");
|
||||||
intent.putExtra(RemoteServiceActivity.EXTRA_DATA, data);
|
intent.putExtra(RemoteServiceActivity.EXTRA_DATA, data);
|
||||||
|
|
||||||
PendingIntent pi = PendingIntent.getActivity(getBaseContext(),
|
PendingIntent pi = PendingIntent.getActivity(getBaseContext(), 0,
|
||||||
PRIVATE_REQUEST_CODE_GET_KEYS, intent, 0);
|
intent,
|
||||||
|
PendingIntent.FLAG_CANCEL_CURRENT | PendingIntent.FLAG_ONE_SHOT);
|
||||||
|
|
||||||
result.putExtra(OpenPgpApi.RESULT_INTENT, pi);
|
result.putExtra(OpenPgpApi.RESULT_INTENT, pi);
|
||||||
}
|
}
|
||||||
@ -358,8 +358,9 @@ public class OpenPgpService extends RemoteService {
|
|||||||
intent.putExtra(RemoteServiceActivity.EXTRA_ERROR_MESSAGE, "todo");
|
intent.putExtra(RemoteServiceActivity.EXTRA_ERROR_MESSAGE, "todo");
|
||||||
intent.putExtra(RemoteServiceActivity.EXTRA_DATA, data);
|
intent.putExtra(RemoteServiceActivity.EXTRA_DATA, data);
|
||||||
|
|
||||||
PendingIntent pi = PendingIntent.getActivity(getBaseContext(),
|
PendingIntent pi = PendingIntent.getActivity(getBaseContext(), 0,
|
||||||
PRIVATE_REQUEST_CODE_GET_KEYS, intent, 0);
|
intent,
|
||||||
|
PendingIntent.FLAG_CANCEL_CURRENT | PendingIntent.FLAG_ONE_SHOT);
|
||||||
|
|
||||||
result.putExtra(OpenPgpApi.RESULT_INTENT, pi);
|
result.putExtra(OpenPgpApi.RESULT_INTENT, pi);
|
||||||
result.putExtra(OpenPgpApi.RESULT_CODE, OpenPgpApi.RESULT_CODE_USER_INTERACTION_REQUIRED);
|
result.putExtra(OpenPgpApi.RESULT_CODE, OpenPgpApi.RESULT_CODE_USER_INTERACTION_REQUIRED);
|
||||||
|
@ -46,9 +46,6 @@ import java.util.Arrays;
|
|||||||
public abstract class RemoteService extends Service {
|
public abstract class RemoteService extends Service {
|
||||||
Context mContext;
|
Context mContext;
|
||||||
|
|
||||||
private static final int PRIVATE_REQUEST_CODE_REGISTER = 651;
|
|
||||||
private static final int PRIVATE_REQUEST_CODE_ERROR = 652;
|
|
||||||
|
|
||||||
public Context getContext() {
|
public Context getContext() {
|
||||||
return mContext;
|
return mContext;
|
||||||
}
|
}
|
||||||
@ -59,6 +56,7 @@ public abstract class RemoteService extends Service {
|
|||||||
return null;
|
return null;
|
||||||
} else {
|
} else {
|
||||||
String packageName = getCurrentCallingPackage();
|
String packageName = getCurrentCallingPackage();
|
||||||
|
Log.d(Constants.TAG, "isAllowed packageName: " + packageName);
|
||||||
|
|
||||||
byte[] packageSignature;
|
byte[] packageSignature;
|
||||||
try {
|
try {
|
||||||
@ -80,8 +78,9 @@ public abstract class RemoteService extends Service {
|
|||||||
intent.putExtra(RemoteServiceActivity.EXTRA_PACKAGE_SIGNATURE, packageSignature);
|
intent.putExtra(RemoteServiceActivity.EXTRA_PACKAGE_SIGNATURE, packageSignature);
|
||||||
intent.putExtra(RemoteServiceActivity.EXTRA_DATA, data);
|
intent.putExtra(RemoteServiceActivity.EXTRA_DATA, data);
|
||||||
|
|
||||||
PendingIntent pi = PendingIntent.getActivity(getBaseContext(),
|
PendingIntent pi = PendingIntent.getActivity(getBaseContext(), 0,
|
||||||
PRIVATE_REQUEST_CODE_REGISTER, intent, 0);
|
intent,
|
||||||
|
PendingIntent.FLAG_CANCEL_CURRENT | PendingIntent.FLAG_ONE_SHOT);
|
||||||
|
|
||||||
// return PendingIntent to be executed by client
|
// return PendingIntent to be executed by client
|
||||||
Intent result = new Intent();
|
Intent result = new Intent();
|
||||||
@ -99,8 +98,9 @@ public abstract class RemoteService extends Service {
|
|||||||
getString(R.string.api_error_wrong_signature));
|
getString(R.string.api_error_wrong_signature));
|
||||||
intent.putExtra(RemoteServiceActivity.EXTRA_DATA, data);
|
intent.putExtra(RemoteServiceActivity.EXTRA_DATA, data);
|
||||||
|
|
||||||
PendingIntent pi = PendingIntent.getActivity(getBaseContext(),
|
PendingIntent pi = PendingIntent.getActivity(getBaseContext(), 0,
|
||||||
PRIVATE_REQUEST_CODE_ERROR, intent, 0);
|
intent,
|
||||||
|
PendingIntent.FLAG_CANCEL_CURRENT | PendingIntent.FLAG_ONE_SHOT);
|
||||||
|
|
||||||
// return PendingIntent to be executed by client
|
// return PendingIntent to be executed by client
|
||||||
Intent result = new Intent();
|
Intent result = new Intent();
|
||||||
@ -163,8 +163,9 @@ public abstract class RemoteService extends Service {
|
|||||||
intent.putExtra(RemoteServiceActivity.EXTRA_ACC_NAME, accountName);
|
intent.putExtra(RemoteServiceActivity.EXTRA_ACC_NAME, accountName);
|
||||||
intent.putExtra(RemoteServiceActivity.EXTRA_DATA, data);
|
intent.putExtra(RemoteServiceActivity.EXTRA_DATA, data);
|
||||||
|
|
||||||
PendingIntent pi = PendingIntent.getActivity(getBaseContext(),
|
PendingIntent pi = PendingIntent.getActivity(getBaseContext(), 0,
|
||||||
PRIVATE_REQUEST_CODE_REGISTER, intent, 0);
|
intent,
|
||||||
|
PendingIntent.FLAG_CANCEL_CURRENT | PendingIntent.FLAG_ONE_SHOT);
|
||||||
|
|
||||||
// return PendingIntent to be executed by client
|
// return PendingIntent to be executed by client
|
||||||
Intent result = new Intent();
|
Intent result = new Intent();
|
||||||
@ -206,7 +207,7 @@ public abstract class RemoteService extends Service {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Log.d(Constants.TAG, "Caller is NOT allowed!");
|
Log.d(Constants.TAG, "Uid is NOT allowed!");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -218,7 +219,7 @@ public abstract class RemoteService extends Service {
|
|||||||
* @throws WrongPackageSignatureException
|
* @throws WrongPackageSignatureException
|
||||||
*/
|
*/
|
||||||
private boolean isPackageAllowed(String packageName) throws WrongPackageSignatureException {
|
private boolean isPackageAllowed(String packageName) throws WrongPackageSignatureException {
|
||||||
Log.d(Constants.TAG, "packageName: " + packageName);
|
Log.d(Constants.TAG, "isPackageAllowed packageName: " + packageName);
|
||||||
|
|
||||||
ArrayList<String> allowedPkgs = ProviderHelper.getRegisteredApiApps(this);
|
ArrayList<String> allowedPkgs = ProviderHelper.getRegisteredApiApps(this);
|
||||||
Log.d(Constants.TAG, "allowed: " + allowedPkgs);
|
Log.d(Constants.TAG, "allowed: " + allowedPkgs);
|
||||||
@ -246,6 +247,7 @@ public abstract class RemoteService extends Service {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Log.d(Constants.TAG, "Package is NOT allowed! packageName: " + packageName);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -55,9 +55,43 @@ public class AppSettingsFragment extends Fragment {
|
|||||||
|
|
||||||
public void setAppSettings(AppSettings appSettings) {
|
public void setAppSettings(AppSettings appSettings) {
|
||||||
this.mAppSettings = appSettings;
|
this.mAppSettings = appSettings;
|
||||||
setPackage(appSettings.getPackageName());
|
updateView(appSettings);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Inflate the layout for this fragment
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||||
|
View view = inflater.inflate(R.layout.api_app_settings_fragment, container, false);
|
||||||
|
mAppNameView = (TextView) view.findViewById(R.id.api_app_settings_app_name);
|
||||||
|
mAppIconView = (ImageView) view.findViewById(R.id.api_app_settings_app_icon);
|
||||||
|
mPackageName = (TextView) view.findViewById(R.id.api_app_settings_package_name);
|
||||||
|
mPackageSignature = (TextView) view.findViewById(R.id.api_app_settings_package_signature);
|
||||||
|
return view;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void updateView(AppSettings appSettings) {
|
||||||
|
// get application name and icon from package manager
|
||||||
|
String appName;
|
||||||
|
Drawable appIcon = null;
|
||||||
|
PackageManager pm = getActivity().getApplicationContext().getPackageManager();
|
||||||
|
try {
|
||||||
|
ApplicationInfo ai = pm.getApplicationInfo(appSettings.getPackageName(), 0);
|
||||||
|
|
||||||
|
appName = (String) pm.getApplicationLabel(ai);
|
||||||
|
appIcon = pm.getApplicationIcon(ai);
|
||||||
|
} catch (NameNotFoundException e) {
|
||||||
|
// fallback
|
||||||
|
appName = appSettings.getPackageName();
|
||||||
|
}
|
||||||
|
mAppNameView.setText(appName);
|
||||||
|
mAppIconView.setImageDrawable(appIcon);
|
||||||
|
|
||||||
|
// advanced info: package name
|
||||||
mPackageName.setText(appSettings.getPackageName());
|
mPackageName.setText(appSettings.getPackageName());
|
||||||
|
|
||||||
|
// advanced info: package signature SHA-256
|
||||||
try {
|
try {
|
||||||
MessageDigest md = MessageDigest.getInstance("SHA-256");
|
MessageDigest md = MessageDigest.getInstance("SHA-256");
|
||||||
md.update(appSettings.getPackageSignature());
|
md.update(appSettings.getPackageSignature());
|
||||||
@ -68,45 +102,6 @@ public class AppSettingsFragment extends Fragment {
|
|||||||
} catch (NoSuchAlgorithmException e) {
|
} catch (NoSuchAlgorithmException e) {
|
||||||
Log.e(Constants.TAG, "Should not happen!", e);
|
Log.e(Constants.TAG, "Should not happen!", e);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Inflate the layout for this fragment
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
|
||||||
View view = inflater.inflate(R.layout.api_app_settings_fragment, container, false);
|
|
||||||
initView(view);
|
|
||||||
return view;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
private void initView(View view) {
|
|
||||||
mAppNameView = (TextView) view.findViewById(R.id.api_app_settings_app_name);
|
|
||||||
mAppIconView = (ImageView) view.findViewById(R.id.api_app_settings_app_icon);
|
|
||||||
|
|
||||||
mPackageName = (TextView) view.findViewById(R.id.api_app_settings_package_name);
|
|
||||||
mPackageSignature = (TextView) view.findViewById(R.id.api_app_settings_package_signature);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void setPackage(String packageName) {
|
|
||||||
PackageManager pm = getActivity().getApplicationContext().getPackageManager();
|
|
||||||
|
|
||||||
// get application name and icon from package manager
|
|
||||||
String appName;
|
|
||||||
Drawable appIcon = null;
|
|
||||||
try {
|
|
||||||
ApplicationInfo ai = pm.getApplicationInfo(packageName, 0);
|
|
||||||
|
|
||||||
appName = (String) pm.getApplicationLabel(ai);
|
|
||||||
appIcon = pm.getApplicationIcon(ai);
|
|
||||||
} catch (NameNotFoundException e) {
|
|
||||||
// fallback
|
|
||||||
appName = packageName;
|
|
||||||
}
|
|
||||||
mAppNameView.setText(appName);
|
|
||||||
mAppIconView.setImageDrawable(appIcon);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -95,6 +95,7 @@ public class RemoteServiceActivity extends ActionBarActivity {
|
|||||||
if (ACTION_REGISTER.equals(action)) {
|
if (ACTION_REGISTER.equals(action)) {
|
||||||
final String packageName = extras.getString(EXTRA_PACKAGE_NAME);
|
final String packageName = extras.getString(EXTRA_PACKAGE_NAME);
|
||||||
final byte[] packageSignature = extras.getByteArray(EXTRA_PACKAGE_SIGNATURE);
|
final byte[] packageSignature = extras.getByteArray(EXTRA_PACKAGE_SIGNATURE);
|
||||||
|
Log.d(Constants.TAG, "ACTION_REGISTER packageName: "+packageName);
|
||||||
|
|
||||||
// Inflate a "Done"/"Cancel" custom action bar view
|
// Inflate a "Done"/"Cancel" custom action bar view
|
||||||
ActionBarHelper.setTwoButtonView(getSupportActionBar(),
|
ActionBarHelper.setTwoButtonView(getSupportActionBar(),
|
||||||
|
Loading…
Reference in New Issue
Block a user