Launcher Badge Icons? - Android Q&A, Help & Troubleshooting

Hi guys,
i have written an Android launcher. It is working fine, but I want to show badge numbers on apps on homescreen (new message in WhatsApp, Facebook ....)
Any idea how this is done? I tried this already and it is not working:
Manifest:
Code:
<receiver android:name=".MyBroadcastReceiver" android:exported="true">
<intent-filter>
<action android:name="com.sonyericsson.home.action.UPDATE_BADGE"/>
<action android:name="android.intent.action.BADGE_COUNT_UPDATE"/>
</intent-filter>
</receiver>
BroadCastReceiver:
Code:
public class MyBroadcastReceiver extends BroadcastReceiver {
private static final String TAG = "MyBroadcastReceiver";
@Override
public void onReceive(Context context, Intent intent) {
StringBuilder sb = new StringBuilder();
sb.append("Action: " + intent.getAction() + "\n");
sb.append("URI: " + intent.toUri(Intent.URI_INTENT_SCHEME).toString() + "\n");
sb.append("App: " + intent.getStringExtra("badge_count_package_name") + "\n");
sb.append("Class: " + intent.getStringExtra("badge_count_class_name") + "\n");
sb.append("Count: " + intent.getStringExtra("badge_count") + "\n");
String log = sb.toString();
System.out.println(TAG + log);
}
}

Related

[Q] Broadcast Actions on Icecream Sandwich

Hello,
As my application is running as a service, it uses the BOOT_COMPLETED and USER_PRESENT events to start.
I tested it on different devices running Android 2.x but today I realised it doesn't work on a Google Nexus 3 which runs Icecream Sandwich.
Both booting and unlocking events does not start the application.
I use the following code :
Code:
<receiver
android:enabled="true"
android:name="myapp.StartReceiver">
<intent-filter>
<action android:name = "android.intent.action.BOOT_COMPLETED"/>
<action android:name = "android.intent.action.USER_PRESENT"/>
</intent-filter>
</receiver>
...
public void onReceive(Context context, Intent intent) {
final String action = intent.getAction();
if (Intent.ACTION_BOOT_COMPLETED.equals(action)) {
// ...
Intent service = new Intent(context, MyService.class);
context.startService(service);
} else if (Intent.ACTION_USER_PRESENT.equals(action)) {
// ...
Intent serviceIntent = new Intent(context, MyService.class);
context.startService(serviceIntent);
}
}
So I wonder if it is related to the Android version.
Any idea why it does not work on this specific phone ?
Thank you
Read this.
I guess it is why it doesn't work. Thank you.

[Q] [DEVELOPMENT HELP] View found bluetooth Device

Hi everybody!
I am developing an app that (for now) will scan bluetooth devices in the area and it display them on screen. Same thing has to do it with devices that are already associated with the terminal.
Problems:
1) If It start the application with bluetooth off, I get the mythical alert asking me if I want to activate the bluetooth. Confirmed the request, the alert for activate the bluetooth appears and then ... Black screen. Theoretically it should show a list of paired device (in this case, my laptop) but the screen is constantly black (for black i mean that the bar of the name of the app and the Android status bar are showed. The phone doesn't freeze)
2) However, if you start the application with bluetooth turned on, the app crashes and exits.
Any suggestion for solve these problems?
This is the Java Source Code:
Code:
public class Bluetooth extends Activity {
ArrayAdapter<String> mAA;
ListView lv;
private static final int REQUEST_ENABLE_BT = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.bluetooth);
lv = (ListView) findViewById(R.id.lv);
mAA = new ArrayAdapter<String>(this, R.id.lv);
BluetoothAdapter mBA = BluetoothAdapter.getDefaultAdapter();
if (!mBA.isEnabled()) {
Intent enableBtIntent = new Intent(
BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
}
Set<BluetoothDevice> pairedDevices = mBA.getBondedDevices();
if (pairedDevices.size() > 0) {
for (BluetoothDevice device : pairedDevices) {
mAA.add(device.getName() + "\n" + device.getAddress());
lv.setAdapter(mAA);
}
}
final BroadcastReceiver mReceiver = new BroadcastReceiver() {
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (BluetoothDevice.ACTION_FOUND.equals(action)) {
BluetoothDevice device = intent
.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
mAA.add(device.getName() + "\n" + device.getAddress());
}
}
};
IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
registerReceiver(mReceiver, filter);
mBA.cancelDiscovery();
lv.setAdapter(mAA);
}
}
Clarification:
- In the manifest i insert the string <uses-permission android:name="android.permission.BLUETOOTH" />
- Layout XML:
HTML:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/ apk /res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<ListView
android:id="@+id/lv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TextView" >
</ListView>
</LinearLayout>
Thank you in advance for all your help!
... And sorry for my English...

[Q] Broadcast Receivers

Hello, I am trying to create a broadcast receiver to detect when the screen was locked. I have it already working to detect when the the tablet was booted, but it won't work for the SCREEN_OFF action. Right now I just have it log any intents that where triggered and so far its only working for when the boot was completed.
Code:
package com.atlantis;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
public class broadcastReceiver extends BroadcastReceiver {
[user=439709]@override[/user]
public void onReceive( Context context , Intent intent ) {
Log.v( "atlantis" , "Hey this intent was triggered " + intent );
if ( "android.intent.action.BOOT_COMPLETED".equals(intent.getAction()) ) {
Intent launchMain = new Intent ( context, MainActivityService.class );
context.startService( launchMain );
}
}
}
Android manifest:
Code:
<receiver
android:name = "com.atlantis.broadcastReciever"
android:enabled = "true"
android:exported = "false" >
<intent-filter>
<action android:name = "android.intent.action.ACTION_SCREEN_OFF" />
<action android:name = "android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
Thanks
reply
did you write anything for screen lock intent... if yes display that code..

Android widget not working on first click

have an android widget which is actually a button to start an activity.The widget works fine using this code but there is a small bug :
When I add the widget to the home screen , clicking it first time doesn't do anything , second time it works. Then it works normally from 1st click. And the same thing happens when the phone is restarted.Can someone help me solve this problem ??
MyWidgetIntentReceiver.java
public class MyWidgetIntentReceiver extends BroadcastReceiver {
@override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals("Start")) {
onUpdate(context);
}
}
private void onUpdate(Context context) {
RemoteViews remoteViews = new RemoteViews(context.getPackageName(),
R.layout.widget_demo);
Intent configIntent = new Intent(context, WidgetFlash.class);
configIntent.putExtra("widget", 1);
configIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
PendingIntent configPendingIntent = PendingIntent.getActivity(context,
0, configIntent, 0);
remoteViews.setOnClickPendingIntent(R.id.widget_button,
configPendingIntent);
MyWidgetProvider.pushWidgetUpdate(context.getApplicationContext(),
remoteViews);
} }
MyWidgetProvider.java :
public class MyWidgetProvider extends AppWidgetProvider {
@override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds) {
RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget_demo);
remoteViews.setOnClickPendingIntent(R.id.widget_button, buildButtonPendingIntent(context));
pushWidgetUpdate(context, remoteViews);
}
public static PendingIntent buildButtonPendingIntent(Context context) {
Intent intent = new Intent();
intent.setAction("Start");
return PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
}
public static void pushWidgetUpdate(Context context, RemoteViews remoteViews) {
ComponentName myWidget = new ComponentName(context, MyWidgetProvider.class);
AppWidgetManager manager = AppWidgetManager.getInstance(context);
manager.updateAppWidget(myWidget, remoteViews);
}}
Widget in Manifest:
<receiver android:name="com.hybernect.flashlight.MyWidgetProvider" >
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data
android:name="android.appwidget.provider"
android:resource="@xml/demo_widget_provider" />
</receiver>
<receiver
android:name="com.hybernect.flashlight.MyWidgetIntentReceiver"
android:label="widgetBroadcastReceiver" >
<intent-filter>
<action android:name="Start" />
</intent-filter>
<meta-data
android:name="android.appwidget.provider"
android:resource="@xml/demo_widget_provider" />
</receiver>
The logcat shows nothing when I click first time. Please help !

[Resolved][NATIVE][CORE]Get *ALL* the missing OK btn and Listview items back

Recently i got a special android 4.4.4 based projector
But i can't change any setting's even i rooted it, there are no any OK button and listview item shows out.
Take "SearchBasedLauncher" as an example:
/boundary/SizeSelector.java
Click to expand...
Click to collapse
Code:
package com.vackosar.searchbasedlauncher.boundary;
import android.app.Activity;
import android.content.Intent;
import com.google.gson.annotations.Expose;
import com.google.inject.Inject;
import com.vackosar.searchbasedlauncher.entity.FontSize;
import com.vackosar.searchbasedlauncher.entity.SelectAction;
import roboguice.context.event.OnCreateEvent;
import roboguice.event.Observes;
import roboguice.inject.ContextSingleton;
@ContextSingleton
public class SizeSelector extends SelectAction<FontSize> {
public static final FontSize DEFAULT = FontSize.pt9;
@Inject private Activity activity;
@Expose private FontSize fontSize = DEFAULT;
@SuppressWarnings("unused")
public void onCreate(@Observes OnCreateEvent onCreate) {
load();
}
@Override
protected Enum<FontSize> getSelected() {
return fontSize;
}
@Override
public void setSelected(Enum<FontSize> selected) {
this.fontSize = (FontSize) selected;
save();
activity.finish();
activity.startActivity(new Intent(activity, activity.getClass()));
}
@Override
public String getId() {
return getClass().getName();
}
@Override
public String getName() {
return "Text Size";
}
public int getSize() {
return fontSize.getSize();
}
}
/entity/SelectAction.java
Click to expand...
Click to collapse
Code:
package com.vackosar.searchbasedlauncher.entity;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import com.google.inject.Inject;
import java.util.ArrayList;
import java.util.List;
import roboguice.context.event.OnCreateEvent;
import roboguice.event.Observes;
public abstract class SelectAction<T extends Enum<T>> extends Action {
@Inject private Activity activity;
@Inject private SingletonPersister<Action> persister;
public SelectAction() {}
protected void setActivity(Activity activity) {
this.activity = activity;
persister = new SingletonPersister<>(activity.getApplicationContext());
load();
}
@SuppressWarnings("unused")
public void onCreate(@Observes OnCreateEvent onCreate) {
load();
}
protected void save() {
persister.save(this);
}
protected void load() {
persister.load(this);
}
public void act() {
List<String> items = new ArrayList<>();
final Enum[] values = getSelected().getClass().getEnumConstants();
for (Object o: values) {
items.add(o.toString());
}
AlertDialog.OnClickListener listener = new AlertDialog.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
setSelected(getSelected().getClass().getEnumConstants()[which]);
}
};
new AlertDialog.Builder(activity)
.setTitle(getName() + "\nCurrent: " + getSelected())
.setItems(items.toArray(new String[items.size()]), listener)
.show();
}
protected abstract Enum<T> getSelected();
public abstract void setSelected(Enum<T> selected);
}
entity/FontSize.java
Click to expand...
Click to collapse
Code:
package com.vackosar.searchbasedlauncher.entity;
public enum FontSize {
pt5,
pt6,
pt7,
pt8,
pt9,
pt10,
pt11,
pt12,
pt13,
pt14,
pt15,
pt16,
pt17,
pt18,
pt19,
pt20,
pt21,
pt22,
pt23,
pt24,
pt25,
pt26,
pt27,
pt28,
pt29,
pt30,
;
public int getSize() {
return Integer.valueOf(this.name().replaceFirst("pt", ""));
}
}
It shows only the current settings taking from data/*.xml
How can i fix it?
Is there someone give hints?
/init.environ.rc
Click to expand...
Click to collapse
Code:
BOOTCLASSPATH /system/framework/core.jar:/system/framework/conscrypt.jar:/system/framework/okhttp.jar:/system/framework/core-junit.jar:/system/framework/bouncycastle.jar:/system/framework/ext.jar:/system/framework/framework.jar:/system/framework/framework2.jar:/system/framework/telephony-common.jar:/system/framework/voip-common.jar:/system/framework/mms-common.jar:/system/framework/android.policy.jar:/system/framework/services.jar:/system/framework/apache-xml.jar:/system/framework/webviewchromium.jar:/system/framework/com.mstar.android.jar:/system/framework/com.jmgo.android.jar
Resolved
So, i dig deeper in framwork.
There is a MOD in AlertDialog to set the fixed resolution for HolatekUi stock apps theme and canceled other listviews in AlertDialog
Code:
public void AlertController.setHolatekUi(boolean b) //[email protected]
{
Log.d("alert", new StringBuilder().append("setHolatekUi =").append(b).toString());
this.mIsHolatekUi = b;
return;
}
public void AlertController.installContent() //[email protected]
{
const float v2 = 131072;
this.mWindow.requestFeature(1);
if (!(this.mView)&&(AlertController.canTextInput(this.mView))) {
label_0019:
if (this.mIsHolatekUi) {
this.mAlertDialogLayout = 01090026;
}
this.mWindow.setContentView(this.mAlertDialogLayout);
this.setupView();
return;
}
this.mWindow.setFlags(v2, v2);
goto label_0019;
}
private void AlertController.setupView() //[email protected]
{
...
if (hasTitle) {
const View divider = 0;
if (!((this.mMessage)||(this.mView))) {
if (!this.mListView) {
View divider = this.mWindow.findViewById(0102034b);
label_009f:
if (!divider) {
label_00a6:
if (!this.mIsHolatekUi) {
this.setBackground(topPanel, contentPanel, customPanel, hasButtons, a, hasTitle, buttonPanel);
}
a.recycle();
return;
}
else {
divider.setVisibility(8);
goto label_00a6;
}
...
}
Code:
import com.android.internal.app.AlertController;
void AlertDialog.<init>(Context context,int theme,boolean createThemeContextWrapper) //[email protected]
{
super(context, AlertDialog.resolveDialogTheme(context, theme), createThemeContextWrapper);
this.mWindow.alwaysReadCloseOnTouchAttr();
AlertController v0 = new AlertController(this.getContext(), this, this.getWindow());
this.mAlert = v0;
this.setHolatekUi(1);
return;
}
protected void AlertDialog.<init>(Context context,boolean cancelable,DialogInterface$OnCancelListener cancelListener) //[email protected]
{
super(context, AlertDialog.resolveDialogTheme(context, 0));
this.mWindow.alwaysReadCloseOnTouchAttr();
this.setCancelable(cancelable);
this.setOnCancelListener(cancelListener);
AlertController v0 = new AlertController(context, this, this.getWindow());
this.mAlert = v0;
this.setHolatekUi(1);
return;
}
public void AlertDialog.setHolatekUi(boolean b) //[email protected]
{
this.mAlert.setHolatekUi(b);
return;
}
public boolean AlertDialog.isHolatekUi() //[email protected]
{
return this.mAlert.isHolatekUi();
}
public void AlertDialog.show() //[email protected]
{
super.show();
if (this.isHolatekUi()) {
WindowManager$LayoutParams lp = this.getWindow().getAttributes();
lp.width = 1280;
lp.height = 768;
this.getWindow().setAttributes(lp);
return;
}
return;
}
Code:
public void AlertDialog$Builder.<init>(Context context,int theme) //[email protected]
{
super();
ContextThemeWrapper v1 = new ContextThemeWrapper(context, AlertDialog.resolveDialogTheme(context, theme));
AlertController$AlertParams v0 = new AlertController$AlertParams(v1);
this.P = v0;
this.mTheme = theme;
if (!theme) {
this.P.mPIsHolatekUi = 1;
return;
}
return;
}
public AlertDialog$Builder AlertDialog$Builder.setHolatekUi(boolean b) //[email protected]
{
this.P.mPIsHolatekUi = b;
return this;
}
Code:
protected void ProgressDialog.onCreate(Bundle savedInstanceState) //[email protected]
{
View view;
const int v9 = 0102000d;
const byte v8 = 1;
const byte v7 = 0;
LayoutInflater inflater = LayoutInflater.from(this.mContext);
TypedArray a = this.mContext.obtainStyledAttributes(v7, R$styleable.AlertDialog, 0101005d, 0);
if (this.mProgressStyle != v8) {
view = inflater.inflate(a.getResourceId(15, 01090083), v7);
if (this.isHolatekUi()) {
view = inflater.inflate(01090084, v7);
}
this.mProgress = view.findViewById(v9);
this.mMessageView = view.findViewById(0102000b);
this.setView(view);
this.setHolatekUi(v8);
}
...
}
Then the less mod is in 04d0d8-0001a6: private AlertController->setupView()V
Code:
04d234: 55e08b16 |00a6: iget-boolean v0, v14, [email protected] // Lcom/android/internal/app/AlertController;->mIsHolatekUi:Z
04d238: 39000600 |00a8: if-nez v0, 00ae // +0006
04d23c: 07e0 |00aa: move-object v0, v14
04d23e: 760802070000 |00ab: invoke-direct/range {v0, v1, v2, v3, v4, v5, v6, v7}, [email protected] // Lcom/android/internal/app/AlertController;->setBackground(Landroid/widget/LinearLayout;Landroid/widget/LinearLayout;Landroid/view/View;ZLandroid/content/res/TypedArray;ZLandroid/view/View;)V
04d244: 6e1030010500 |00ae: invoke-virtual {v5}, [email protected] // Landroid/content/res/TypedArray;->recycle()V
04d24a: 0e00 |00b1: return-void
patch for someone else
relative resources
<public type="layout" name="progress_dialog_holatek" id="0x01090084" />
<public type="layout" name="alert_dialog_holo_holatek" id="0x01090026" />
<public type="drawable" name="holatek_alert_button_bg" id="0x01080297" />
layout/alert_dialog_holo_holatek.xml
+ set visibility="gone"
Code:
...
<LinearLayout android:orientation="vertical" android:id="@id/buttonPanel" android:layout_width="fill_parent" android:layout_height="wrap_content" android:minHeight="80.0dip">
<LinearLayout android:gravity="center" android:orientation="horizontal" android:paddingTop="4.0dip" android:layout_width="fill_parent" android:layout_height="wrap_content" android:measureWithLargestChild="true" android:paddingStart="2.0dip" android:paddingEnd="2.0dip">
<LinearLayout android:orientation="horizontal" android:id="@id/leftSpacer" android:visibility="gone" android:layout_width="0.0dip" android:layout_height="wrap_content" android:layout_weight="0.25" />
<Button android:textSize="25.0dip" android:textColor="#ffffffff" android:layout_gravity="start" android:id="@id/button1" android:background="@drawable/holatek_alert_button_bg" android:layout_width="280.0dip" android:layout_height="80.0dip" android:layout_marginLeft="40.0dip" android:layout_marginRight="40.0dip" android:minHeight="@dimen/alert_dialog_button_bar_height" android:maxLines="2" />
<Button android:textSize="25.0dip" android:textColor="#ffffffff" android:layout_gravity="center_horizontal" android:id="@id/button3" android:background="@drawable/holatek_alert_button_bg" android:layout_width="280.0dip" android:layout_height="80.0dip" android:layout_marginLeft="40.0dip" android:layout_marginRight="40.0dip" android:minHeight="@dimen/alert_dialog_button_bar_height" android:maxLines="2" />
<Button android:textSize="25.0dip" android:textColor="#ffffffff" android:layout_gravity="end" android:id="@id/button2" android:background="@drawable/holatek_alert_button_bg" android:layout_width="280.0dip" android:layout_height="80.0dip" android:layout_marginLeft="40.0dip" android:layout_marginRight="40.0dip" android:minHeight="@dimen/alert_dialog_button_bar_height" android:maxLines="2" />
<LinearLayout android:orientation="horizontal" android:id="@id/rightSpacer" android:visibility="gone" android:layout_width="0.0dip" android:layout_height="wrap_content" android:layout_weight="0.25" />
</LinearLayout>
</LinearLayout>
...
layout/progress_dialog_holatek.xml
mainly changed orientation from "horizontal" to "vertical"
Code:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout android:layout_width="fill_parent" android:layout_height="wrap_content"
xmlns:android="http://schemas.android.com/apk/res/android">
<LinearLayout android:gravity="center" android:orientation="vertical" android:id="@id/body" android:paddingTop="10.0dip" android:paddingBottom="10.0dip" android:layout_width="fill_parent" android:layout_height="fill_parent" android:baselineAligned="false" android:paddingStart="8.0dip" android:paddingEnd="8.0dip">
<ProgressBar android:id="@id/progress" android:layout_width="wrap_content" android:layout_height="wrap_content" android:max="10000" android:layout_marginEnd="12.0dip" style="?android:attr/progressBarStyle" />
<TextView android:textSize="24.0dip" android:textColor="#ffffffff" android:gravity="center" android:layout_gravity="center_vertical" android:id="@id/message" android:layout_width="fill_parent" android:layout_height="wrap_content" />
</LinearLayout>
</FrameLayout>
Follows to get a try for moded jar
patch the class.dex in framework2.jar and fix the checksum then drag to framework2.jar
Code:
patch framwork2.apk/class.dex
offset:4D238h
bit: 39000600
to: 55E08B16
update /system/etc/install-recovery.sh
Code:
#!/system/bin/sh
# If you're implementing this in a custom kernel/firmware,
# I suggest you use a different script name, and add a service
# to launch it from init.rc
# Launches SuperSU in daemon mode only on Android 4.3+.
# Nothing will happen on 4.2.x or older, unless SELinux+Enforcing.
# If you want to force loading the daemon, use "--daemon" instead
/system/xbin/daemonsu --auto-daemon &
# Some apps like to run stuff from this script as well, that will
# obviously break root - in your code, just search this file
# for "install-recovery-2.sh", and if present, write there instead.
/system/etc/install-recovery-2.sh
# ** A System File Hot Patcher Helper For ROOTED Device **
# The patched file should stored in _SRC and named as "xxxx.yyy" the orignal.
# Orignal file will backuped in _SRC/backup/ after the script first runs.
# This script will automaticly switch this two versions of files when reruns.
## Remember delete the files in _SRC and "xxxx.yyy_updated" in
## _SRC/backup/ manually after the first run, to keep the patched versions.
_SRC=/system/etc/update
_FILES=$(cd ${_SRC} 2>/dev/null; ls -A1 *.*)
_DST=/system/framework
#_DST=/system/app
if [ -d "${_SRC}" ]; then
[ -z "${_FILES}" ] || mount -o remount,rw /system
for _NAME in ${_FILES}; do
if [ -f "${_DST}/${_NAME}" ]; then
if [ -f "${_SRC}/backup/${_NAME}_updated" -a -f "${_SRC}/backup/${_NAME}" ]; then
cat "${_SRC}/backup/${_NAME}" > "${_DST}/${_NAME}"
[ $? -eq 0 ] || rm -f "${_SRC}/backup/${_NAME}_updated"
echo $? > "${_SRC}/${_NAME}_restored"
else
mkdir "${_SRC}/backup" 2>/dev/null
cat "${_DST}/${_NAME}" > "${_SRC}/backup/${_NAME}"
cat "${_SRC}/${_NAME}" > "${_DST}/${_NAME}"
echo $? > "${_SRC}/${_NAME}_updated"
fi
fi
sync
done
[ -z "${_FILES}" ] || mount -o remount,ro /system
fi
upload modded and stock jar to /system/etc/update/
reboot to see what happend
The New Dialog got bigger buttons, so ugly but functionable now.
a conclusion
Now, we get details from the code level.
As a conclusion, vendor limits the 3rd setting changes by control the dialog drawing as following:
just show the editable text value in dialog, no commit buttons in vendor theme in default.
other selection lists in dialog are canceled to show up.
BTW, user APKs installing limits to 5, but can reset simply by clear the package installer's data.
Just debug by jdb, and apply following instruction to check if there is any limits mentioned above for a quick running crack.
Code:
stop in android.app.AlertDialog.setHolatekUi(boolean)
set b = false
cont

Categories

Resources