Bagaimana cara mengubah ikon aplikasi secara terprogram di Android?

153

Apakah mungkin untuk mengubah ikon aplikasi langsung dari program?
Maksud saya, ubah icon.pngdi res\drawablefolder.
Saya ingin membiarkan pengguna mengubah ikon aplikasi dari program sehingga lain kali mereka akan melihat ikon yang dipilih sebelumnya di peluncur.

systempuntoout
sumber

Jawaban:

80

Ini pertanyaan lama, tetapi masih aktif karena tidak ada fitur Android eksplisit. Dan orang-orang dari facebook menemukan pekerjaan - entah bagaimana. Hari ini, saya menemukan cara yang bekerja untuk saya. Tidak sempurna (lihat keterangan di akhir jawaban ini) tetapi berhasil!

Gagasan utamanya adalah, saya memperbarui ikon pintasan aplikasi saya, yang dibuat oleh peluncur di layar beranda. Ketika saya ingin mengubah sesuatu pada ikon shortcut, saya menghapusnya terlebih dahulu dan membuatnya kembali dengan bitmap baru.

Ini kodenya. Ini memiliki tombol increment. Saat ditekan, pintasan diganti dengan yang memiliki nomor penghitungan baru.

Pertama, Anda memerlukan dua izin ini dalam manifes Anda:

<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />
<uses-permission android:name="com.android.launcher.permission.UNINSTALL_SHORTCUT" />

Maka Anda memerlukan dua metode ini untuk menginstal dan menghapus instalan pintas. The shortcutAddMetode menciptakan bitmap dengan nomor di dalamnya. Ini hanya untuk menunjukkan bahwa itu benar-benar berubah. Anda mungkin ingin mengubah bagian itu dengan sesuatu, Anda ingin di aplikasi Anda.

private void shortcutAdd(String name, int number) {
    // Intent to be send, when shortcut is pressed by user ("launched")
    Intent shortcutIntent = new Intent(getApplicationContext(), Play.class);
    shortcutIntent.setAction(Constants.ACTION_PLAY);

    // Create bitmap with number in it -> very default. You probably want to give it a more stylish look
    Bitmap bitmap = Bitmap.createBitmap(100, 100, Bitmap.Config.ARGB_8888);
    Paint paint = new Paint();
    paint.setColor(0xFF808080); // gray
    paint.setTextAlign(Paint.Align.CENTER);
    paint.setTextSize(50);
    new Canvas(bitmap).drawText(""+number, 50, 50, paint);
    ((ImageView) findViewById(R.id.icon)).setImageBitmap(bitmap);

    // Decorate the shortcut
    Intent addIntent = new Intent();
    addIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);
    addIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, name);
    addIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON, bitmap);

    // Inform launcher to create shortcut
    addIntent.setAction("com.android.launcher.action.INSTALL_SHORTCUT");
    getApplicationContext().sendBroadcast(addIntent);
}

private void shortcutDel(String name) {
    // Intent to be send, when shortcut is pressed by user ("launched")
    Intent shortcutIntent = new Intent(getApplicationContext(), Play.class);
    shortcutIntent.setAction(Constants.ACTION_PLAY);

    // Decorate the shortcut
    Intent delIntent = new Intent();
    delIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);
    delIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, name);

    // Inform launcher to remove shortcut
    delIntent.setAction("com.android.launcher.action.UNINSTALL_SHORTCUT");
    getApplicationContext().sendBroadcast(delIntent);
}

Dan akhirnya, berikut adalah dua pendengar untuk menambahkan pintasan pertama dan memperbarui pintasan dengan penghitung yang bertambah.

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.test);
    findViewById(R.id.add).setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            shortcutAdd("changeIt!", count);
        }
    });
    findViewById(R.id.increment).setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            shortcutDel("changeIt!");
            count++;
            shortcutAdd("changeIt!", count);
        }
    });
}

Catatan:

  • Cara ini juga berfungsi jika Aplikasi Anda mengontrol lebih banyak pintasan di layar beranda, misalnya dengan tambahan yang berbeda di menu Intent. Mereka hanya perlu nama yang berbeda sehingga yang benar dihapus dan diinstal ulang.

  • Penanganan pintasan terprogram di Android adalah fitur Android yang terkenal, banyak digunakan tetapi tidak didukung secara resmi. Tampaknya berfungsi pada peluncur default dan saya tidak pernah mencobanya di tempat lain. Jadi jangan salahkan saya, ketika Anda mendapatkan email pengguna ini "Ini tidak berfungsi pada XYZ saya, double root, ponsel super blasted"

  • Peluncur menulis Toastkapan pintasan diinstal dan yang ketika dihapus. Jadi saya mendapatkan dua Toasts setiap kali saya mengubah ikon. Ini tidak sempurna, tapi yah, selama sisa aplikasi saya sempurna ...

jboi
sumber
9
Aplikasi Kalender hari ini memuat ikon setiap hari tanpa bersulang.
Jim McKeeth
1
@ Jim (saya pikir) ini sebenarnya sebuah widget
JacksOnF1re
3
sayangnya shortcutDel tidak berfungsi lagi di Marshmallow, lihat juga stackoverflow.com/a/33731620/1545993
Taifun
2
ini menggantikan ikon pintasan, bukan ikon peluncur
user1506104
3
Dalam baris di bawah ini apa itu Play.class dan Constants.ACTION_PLAY Intent shortcutIntent = Intent baru (getApplicationContext (), Play.class); shortcutIntent.setAction (Constants.ACTION_PLAY);
Dasharath Singh Bajroliya
136

Coba ini, ini berfungsi baik untuk saya:

1. Ubah MainActivitybagian Anda di AndroidManifest.xml, hapus dari itu, sejalan dengan MAINkategori di intent-filterbagian

<activity android:name="ru.quickmessage.pa.MainActivity"
    android:configChanges="keyboardHidden|orientation"
    android:screenOrientation="portrait"
    android:label="@string/app_name"
    android:theme="@style/CustomTheme"
    android:launchMode="singleTask">
    <intent-filter>
        ==> <action android:name="android.intent.action.MAIN" /> <== Delete this line
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

2. Buat <activity-alias>, untuk masing-masing ikon Anda. Seperti ini

<activity-alias android:label="@string/app_name" 
    android:icon="@drawable/icon" 
    android:name=".MainActivity-Red"
    android:enabled="false"
    android:targetActivity=".MainActivity">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>   
</activity-alias>

3. Set terprogram: atur atribut ENABLE untuk yang sesuaiactivity-alias

 getPackageManager().setComponentEnabledSetting(
        new ComponentName("ru.quickmessage.pa", "ru.quickmessage.pa.MainActivity-Red"), 
            PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);

Catatan, Setidaknya satu harus diaktifkan setiap saat.

PA
sumber
3
sayangnya berfungsi berbeda di seluruh perangkat yang saya coba. Bekerja pada HTC Desire 2.2, tetapi tidak dapat diandalkan pada Galaxy Nexus 4.2.2 dan Nexus 7 4.3. Pada Galaxy Nexus, dapat menyebabkan semua ikon untuk aplikasi menghilang, dan juga semua widget yang dihapus. Sayang sekali, jadi saya harus menghapus fungsi ini di perangkat yang lebih baru.
Richard Le Mesurier
7
saya tidak dapat meluncurkan aplikasi saya karena saya menghapus ini: <action android: name = "android.intent.action.MAIN" /> <kategori android: name = "android.intent.category.LAUNCHER" />
noobProgrammer
1
Ini berfungsi dengan baik bagi saya untuk beralih di antara ikon peluncur di baki aplikasi dan homescreen, tetapi saya telah menemukan bahwa ikon yang digunakan di tingkat OS (seperti untuk multi-tasking, popup uninstall, atau dalam daftar Application Manager) tetap ada yang asli atau menjadi ikon Android generik default jika Anda belum menetapkan satu pada tingkat aplikasi dalam manifes. Apakah Anda menemukan solusi untuk ini, atau apakah Anda hanya mentolerir ketidakcocokan (atau ketidakhadiran) pada ikon di level OS?
jokeefe
2
Kesalahan menjalankan aplikasi. Aktivitas default tidak ditemukan.
CopsOnRoad
1
Kesalahan menjalankan aplikasi. Aktivitas default tidak ditemukan
Kamil Ibadov
36

Anda tidak dapat mengubah manifes atau sumber daya di APK yang ditandatangani dan disegel, kecuali melalui pembaruan perangkat lunak.

CommonsWare
sumber
2
@Nanne: Itu widget aplikasi atau fitur layar awal, bukan ikon aplikasi. Anda masih tidak dapat mengubah manifes atau sumber daya kecuali melalui pembaruan perangkat lunak.
CommonsWare
1
? Tidak, maksud saya sebaliknya: itu bukan (diiklankan sebagai) widget. Saya menambahkannya sebagai pintasan aplikasi. Tapi, seperti yang Anda katakan, hanya karena barang non-stok ini menyiratkan hanya ikonnya, itu tidak berarti itu adalah :)
Nanne
2
@NeTeInStEiN: Ini tidak akan berfungsi untuk semua layar beranda (misalnya, yang tidak memperhatikan perubahan yang diaktifkan komponen).
CommonsWare
1
Tidak benar lagi. Kalender Google di Android 6+ berubah dalam peluncur setiap hari. Hari ini, ikonnya adalah "2", kemarin itu adalah "1". Biasanya, ada "31" pada ikon. Tapi tidak lagi, itu berubah. Adakah yang tahu bagaimana ini mungkin?
UeliDeSchwert
1
@ Bobby: Maksud saya ada ratusan, jika bukan ribuan, implementasi layar beranda di Play Store, selain ratusan layar beranda pra-instal berbeda di ribuan model perangkat Android yang ada. Implementasi layar beranda tersebut boleh memiliki kait yang memungkinkan penggantian ikon peluncur dinamis. Namun, tidak semua layar beranda menawarkan ini. Hanya karena Anda melihat perilaku ini untuk satu aplikasi pada satu layar beranda pada satu perangkat tidak berarti itu tersedia untuk semua aplikasi pada semua layar beranda pada semua perangkat.
CommonsWare
17

Secara programatis, Anda mungkin ingin mempublikasikan peluncur aplikasi sendiri:

Catatan: metode ini tidak lagi berfungsi dimulai dengan Android 8.0 - Oreo

Di AndroidManifest.xml Anda, tambahkan:

<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT"/>

Maka Anda perlu membuat maksud peluncur aplikasi Anda:

Intent myLauncherIntent = new Intent();
myLauncherIntent.setClassName("your.package.name", "YourLauncherActivityName");
myLauncherIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

Buat niat pintas instal dengan peluncur aplikasi dan ikon khusus:

Intent intent = new Intent();
intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, myLauncherIntent);
intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, "Application Name");
intent.putExtra
       (
        Intent.EXTRA_SHORTCUT_ICON_RESOURCE,
        Intent.ShortcutIconResource.fromContext
                                    (
                                         getApplicationContext(), 
                                         R.drawable.app_icon
                                    )
       );
intent.setAction("com.android.launcher.action.INSTALL_SHORTCUT");

Dan akhirnya meluncurkan maksud siaran:

getApplicationContext().sendBroadcast(intent);
Andrei Marcut
sumber
ini menggantikan ikon pintasan, bukan ikon peluncur
user1506104
10

Dengan asumsi Anda bermaksud mengubah ikon yang ditampilkan di layar beranda, ini dapat dengan mudah dilakukan dengan membuat widget yang melakukan hal ini. Inilah artikel yang menunjukkan bagaimana hal itu dapat dilakukan untuk aplikasi jenis "pesan baru" yang mirip dengan iPhone:

http://www.cnet.com/8301-19736_1-10278814-251.html

Marius Kjeldahl
sumber
9

@ PA's solution sebagian berfungsi untuk saya. Detail temuan saya di bawah ini:

1) Cuplikan kode pertama salah, lihat di bawah:

<activity
    ...
    <intent-filter>
        ==> <action android:name="android.intent.action.MAIN" /> <== This line shouldn't be deleted, otherwise will have compile error
        <category android:name="android.intent.category.LAUNCHER" /> //DELETE THIS LINE
    </intent-filter>
</activity>

2) Harus menggunakan kode berikut untuk menonaktifkan semua ikon sebelum mengaktifkan yang lain, jika tidak maka akan menambah ikon baru, alih-alih menggantinya.

getPackageManager().setComponentEnabledSetting(
        getComponentName(), PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);

TETAPI, jika Anda menggunakan kode di atas, maka pintasan di homescreen akan dihapus! Dan itu tidak akan ditambahkan kembali secara otomatis. Anda mungkin dapat menambahkan ikon kembali secara terprogram, tetapi mungkin tidak akan tetap pada posisi yang sama seperti sebelumnya.

3) Perhatikan bahwa ikon tidak akan segera diubah, mungkin perlu beberapa detik. Jika Anda mengkliknya tepat setelah mengubah, Anda mungkin mendapatkan pesan kesalahan yang mengatakan: "Aplikasi tidak diinstal".

Jadi, IMHO solusi ini hanya cocok untuk mengubah ikon di peluncur aplikasi saja, bukan untuk pintasan (yaitu ikon di homescreen)

Deqing
sumber
2
Kesalahan menjalankan aplikasi. Aktivitas default tidak ditemukan.
CopsOnRoad
Anda menghapus peluncur, bagaimana ia menemukan aktivitas default @Deqing?
j2emanue
5

Coba solusi ini

<activity android:name=".SplashActivity"
        android:label="@string/app_name"
        android:icon="@drawable/ic_launcher">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <activity-alias android:label="ShortCut"
        android:icon="@drawable/ic_short_cut"
        android:name=".SplashActivityAlias"
        android:enabled="false"
        android:targetActivity=".SplashActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity-alias>

Tambahkan kode berikut ketika Anda ingin mengubah ikon aplikasi Anda

PackageManager pm = getPackageManager();
                    pm.setComponentEnabledSetting(
                            new ComponentName(YourActivity.this,
                                    "your_package_name.SplashActivity"),
                            PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
                            PackageManager.DONT_KILL_APP);

                    pm.setComponentEnabledSetting(
                            new ComponentName(YourActivity.this,
                                    "your_package_name.SplashActivityAlias"),
                            PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
                            PackageManager.DONT_KILL_APP);
Faxriddin Abdullayev
sumber
4

AndroidManifest.xml contoh:

<application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">

        <activity android:name="com.pritesh.resourceidentifierexample.MainActivity"
                  android:label="@string/app_name"
                  android:launchMode="singleTask">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <!--<category android:name="android.intent.category.LAUNCHER"/>-->
            </intent-filter>
        </activity>

        <activity-alias android:label="RED"
                        android:icon="@drawable/ic_android_red"
                        android:name="com.pritesh.resourceidentifierexample.MainActivity-Red"
                        android:enabled="true"
                        android:targetActivity="com.pritesh.resourceidentifierexample.MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity-alias>

        <activity-alias android:label="GREEN"
                        android:icon="@drawable/ic_android_green"
                        android:name="com.pritesh.resourceidentifierexample.MainActivity-Green"
                        android:enabled="false"
                        android:targetActivity="com.pritesh.resourceidentifierexample.MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity-alias>

        <activity-alias android:label="BLUE"
                        android:icon="@drawable/ic_android_blue"
                        android:name="com.pritesh.resourceidentifierexample.MainActivity-Blue"
                        android:enabled="false"
                        android:targetActivity="com.pritesh.resourceidentifierexample.MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity-alias>

    </application>

Kemudian ikuti di bawah ini kode yang diberikan di MainActivity:

ImageView imageView = (ImageView)findViewById(R.id.imageView);
            int imageResourceId;
            String currentDateTimeString = DateFormat.getDateTimeInstance().format(new Date());
            int hours = new Time(System.currentTimeMillis()).getHours();
            Log.d("DATE", "onCreate: "  + hours);

            getPackageManager().setComponentEnabledSetting(
                    getComponentName(), PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);

            if(hours == 13)
            {
                imageResourceId = this.getResources().getIdentifier("ic_android_red", "drawable", this.getPackageName());
                getPackageManager().setComponentEnabledSetting(
                        new ComponentName("com.pritesh.resourceidentifierexample", "com.pritesh.resourceidentifierexample.MainActivity-Red"),
                        PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);
            }else if(hours == 14)
            {
                imageResourceId = this.getResources().getIdentifier("ic_android_green", "drawable", this.getPackageName());
                getPackageManager().setComponentEnabledSetting(
                        new ComponentName("com.pritesh.resourceidentifierexample", "com.pritesh.resourceidentifierexample.MainActivity-Green"),
                        PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);

            }else
            {
                imageResourceId = this.getResources().getIdentifier("ic_android_blue", "drawable", this.getPackageName());
                getPackageManager().setComponentEnabledSetting(
                        new ComponentName("com.pritesh.resourceidentifierexample", "com.pritesh.resourceidentifierexample.MainActivity-Blue"),
                        PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);

            }

            imageView.setImageResource(imageResourceId);
Pritesh Patel
sumber
Saya mendapat com.pritesh.resourceidentifierexample.MainActivity-Red doesn't exist in com.pritesh.resourceidentifierexamplepengecualian. di sini saya telah menggunakan nama manifes Anda hanya untuk menunjukkan masalah saya
Tejas Pandya
0

Untuk mendapatkan solusinya dengan Markus bekerja, saya membutuhkan Intent pertama jadi:

Intent myLauncherIntent = new Intent(Intent.ACTION_MAIN);
            myLauncherIntent.setClassName(this,  this.getClass().getName());
            myLauncherIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
PuZZleDucK
sumber
0

Menerapkan saran yang disebutkan, saya menghadapi masalah aplikasi terbunuh setiap kali ikon default diubah menjadi ikon baru. Jadi telah mengimplementasikan kode dengan beberapa tweak. Langkah 1). Dalam file AndroidManifest.xml, buat aktivitas default dengan android: enabled = "true" & alias lainnya dengan android: enabled = "false". Anda tidak akan berisi tetapi menambahkannya dengan android: enabled = "true".

       <activity
        android:name=".activities.SplashActivity"
        android:label="@string/app_name"
        android:screenOrientation="portrait"
        android:theme="@style/SplashTheme">

    </activity>
    <!-- <activity-alias used to change app icon dynamically>   : default icon, set enabled true    -->
    <activity-alias
        android:label="@string/app_name"
        android:icon="@mipmap/ic_launcher"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:name=".SplashActivityAlias1" <!--put any random name started with dot-->
        android:enabled="true"
        android:targetActivity=".activities.SplashActivity"> <!--target activity class path will be same for all alias-->
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity-alias>
    <!-- <activity-alias used to change app icon dynamically>  : sale icon, set enabled false initially -->
    <activity-alias
        android:label="@string/app_name"
        android:icon="@drawable/ic_store_marker"
        android:roundIcon="@drawable/ic_store_marker"
        android:name=".SplashActivityAlias" <!--put any random name started with dot-->
        android:enabled="false"
        android:targetActivity=".activities.SplashActivity"> <!--target activity class path will be same for all alias-->
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity-alias>

Langkah 2). Buat metode yang akan digunakan untuk menonaktifkan aktivitas-alias pertama yang berisi ikon default & mengaktifkan alias kedua yang berisi ikon perlu diubah.

/**
 * method to change the app icon dynamically
 *
 * @param context
 * @param isNewIcon  : true if new icon need to be set; false to set default 
 * icon
 */

public static void changeAppIconDynamically(Context context, boolean isNewIcon) {
    PackageManager pm = context.getApplicationContext().getPackageManager();
    if (isNewIcon) {
        pm.setComponentEnabledSetting(
                new ComponentName(context,
                        "com.example.dummy.SplashActivityAlias1"), //com.example.dummy will be your package
                PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
                PackageManager.DONT_KILL_APP);

        pm.setComponentEnabledSetting(
                new ComponentName(context,
                        "com.example.dummy.SplashActivityAlias"),
                PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
                PackageManager.DONT_KILL_APP);
    } else {
        pm.setComponentEnabledSetting(
                new ComponentName(context,
                        "com.example.dummy.SplashActivityAlias1"),
                PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
                PackageManager.DONT_KILL_APP);

        pm.setComponentEnabledSetting(
                new ComponentName(context,
                        "com.example.dummy.SplashActivityAlias"),
                PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
                PackageManager.DONT_KILL_APP);
    }
}

Langkah 3). Sekarang panggil metode ini tergantung pada kebutuhan Anda, katakanlah pada klik tombol atau tanggal khusus atau kondisi khusus, seperti -

// Switch app icon to new icon
    GeneralUtils.changeAppIconDynamically(EditProfileActivity.this, true);
// Switch app icon to default icon
            GeneralUtils.changeAppIconDynamically(EditProfileActivity.this, false);

Semoga ini akan membantu mereka yang menghadapi masalah aplikasi terbunuh pada perubahan ikon. Selamat Coding :)

Abhijeet
sumber