Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
android_frameworks_base
=======================

Android base frameworks (cyanogenmod) by Sarbyn
4 changes: 4 additions & 0 deletions packages/SystemUI/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,10 @@
<uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" />
<uses-permission android:name="android.permission.READ_SYNC_SETTINGS" />
<uses-permission android:name="android.permission.WRITE_SYNC_SETTINGS" />

<!-- MOD by sarbyn -->
<uses-permission android:name="android.permission.CLEAR_APP_USER_DATA" />
<uses-permission android:name="android.permission.FORCE_STOP_PACKAGES" />

<application
android:persistent="true"
Expand Down
8 changes: 7 additions & 1 deletion packages/SystemUI/res/menu/notification_popup_menu.xml
Original file line number Diff line number Diff line change
Expand Up @@ -18,5 +18,11 @@
*/
-->
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/notification_inspect_item" android:title="@string/status_bar_notification_inspect_item_title" />
<item android:id="@+id/notification_inspect_item"
android:title="@string/status_bar_notification_inspect_item_title" />
<item android:id="@+id/notification_inspect_item_force_stop"
android:title="@string/advanced_dev_option_force_stop" />
<item android:id="@+id/notification_inspect_item_wipe_app"
android:title="@string/advanced_dev_option_wipe_app" />

</menu>
3 changes: 3 additions & 0 deletions packages/SystemUI/res/menu/recent_popup_menu.xml
Original file line number Diff line number Diff line change
Expand Up @@ -20,4 +20,7 @@
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/recent_remove_item" android:title="@string/status_bar_recent_remove_item_title" />
<item android:id="@+id/recent_inspect_item" android:title="@string/status_bar_recent_inspect_item_title" />
<item android:id="@+id/recent_force_stop" android:title="@string/advanced_dev_option_force_stop" />
<item android:id="@+id/recent_wipe_app" android:title="@string/advanced_dev_option_wipe_app" />

</menu>
2 changes: 2 additions & 0 deletions packages/SystemUI/res/values-it/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -161,4 +161,6 @@
<string name="navbar_menu_conditional_button">Tasto menu (nascondi autom.)</string>
<string name="navbar_menu_always_button">Tasto menu (mostra sempre)</string>
<string name="navbar_menu_big_button">Tasto menu</string>
<string name="advanced_dev_option_wipe_app">"Cancella dati applicazioni"</string>
<string name="advanced_dev_option_force_stop">"Arresto forzato"</string>
</resources>
3 changes: 3 additions & 0 deletions packages/SystemUI/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -425,4 +425,7 @@
<string name="navbar_menu_conditional_button">Menu (autoHide) button</string>
<string name="navbar_menu_always_button">Menu (alwaysShow) button</string>
<string name="navbar_menu_big_button">Menu button</string>

<string name="advanced_dev_option_wipe_app">"Wipe app data"</string>
<string name="advanced_dev_option_force_stop">"Force stop"</string>
</resources>
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,14 @@
import android.app.ActivityManager;
import android.app.ActivityManagerNative;
import android.app.ActivityOptions;
import android.app.admin.DevicePolicyManager;
import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ApplicationInfo;
import android.content.pm.IPackageDataObserver;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.content.res.TypedArray;
Expand All @@ -38,6 +44,7 @@
import android.provider.Settings;
import android.util.AttributeSet;
import android.util.Log;
import android.util.Slog;
import android.view.Display;
import android.view.KeyEvent;
import android.view.IWindowManager;
Expand Down Expand Up @@ -882,6 +889,36 @@ public void handleLongPress(
new PopupMenu(mContext, anchorView == null ? selectedView : anchorView);
mPopup = popup;
popup.getMenuInflater().inflate(R.menu.recent_popup_menu, popup.getMenu());

final ContentResolver cr = mContext.getContentResolver();
if(Settings.Secure.getInt(cr,
Settings.Secure.DEVELOPMENT_SETTINGS_ENABLED, 0) == 0) {
popup.getMenu().findItem(R.id.recent_force_stop).setVisible(false);
popup.getMenu().findItem(R.id.recent_wipe_app).setVisible(false);
} else {
ViewHolder viewHolder = (ViewHolder) selectedView.getTag();
if (viewHolder != null) {
final TaskDescription ad = viewHolder.taskDescription;
try {
PackageManager pm = (PackageManager) mContext.getPackageManager();
ApplicationInfo mAppInfo = pm.getApplicationInfo(ad.packageName, 0);
DevicePolicyManager mDpm = (DevicePolicyManager) mContext.getSystemService(Context.DEVICE_POLICY_SERVICE);

if ((mAppInfo.flags&(ApplicationInfo.FLAG_SYSTEM
| ApplicationInfo.FLAG_ALLOW_CLEAR_USER_DATA))
== ApplicationInfo.FLAG_SYSTEM
|| mDpm.packageHasActiveAdmins(ad.packageName))
popup.getMenu()
.findItem(R.id.notification_inspect_item_wipe_app).setEnabled(false);
else
Slog.d(TAG, "Not a 'special' application");
} catch (NameNotFoundException ex) {
Slog.e(TAG, "Failed looking up ApplicationInfo for " + ad.packageName, ex);
}
}
}


popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
public boolean onMenuItemClick(MenuItem item) {
if (item.getItemId() == R.id.recent_remove_item) {
Expand All @@ -895,6 +932,28 @@ public boolean onMenuItemClick(MenuItem item) {
} else {
throw new IllegalStateException("Oops, no tag on view " + selectedView);
}
} else if (item.getItemId() == R.id.recent_force_stop){
ViewHolder viewHolder = (ViewHolder) selectedView.getTag();
if (viewHolder != null) {
final TaskDescription ad = viewHolder.taskDescription;
ActivityManager am = (ActivityManager)mContext.getSystemService(
Context.ACTIVITY_SERVICE);
am.forceStopPackage(ad.packageName);
mRecentsContainer.removeViewInLayout(selectedView);
} else {
throw new IllegalStateException("Oops, no tag on view " + selectedView);
}
} else if (item.getItemId() == R.id.recent_wipe_app){
ViewHolder viewHolder = (ViewHolder) selectedView.getTag();
if (viewHolder != null) {
final TaskDescription ad = viewHolder.taskDescription;
ActivityManager am = (ActivityManager) mContext.getSystemService(Context.ACTIVITY_SERVICE);
am.clearApplicationUserData(ad.packageName, new FakeClearUserDataObserver());
mRecentsContainer.removeViewInLayout(selectedView);
} else {
throw new IllegalStateException("Oops, no tag on view " + selectedView);
}

} else {
return false;
}
Expand All @@ -909,4 +968,9 @@ public void onDismiss(PopupMenu menu) {
});
popup.show();
}

class FakeClearUserDataObserver extends IPackageDataObserver.Stub {
public void onRemoveCompleted(final String packageName, final boolean succeeded) {
}
}
}
Loading