Skip to content

Commit

Permalink
Load installed apps is now asynchronous
Browse files Browse the repository at this point in the history
  • Loading branch information
javiersantos committed Jun 4, 2015
1 parent 2f19549 commit 1bb8e4d
Show file tree
Hide file tree
Showing 2 changed files with 96 additions and 51 deletions.
129 changes: 81 additions & 48 deletions app/src/main/java/com/javiersantos/mlmanager/MainActivity.java
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
package com.javiersantos.mlmanager;

import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.graphics.drawable.Drawable;
import android.os.AsyncTask;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
Expand All @@ -21,6 +23,7 @@
import com.javiersantos.mlmanager.utils.UtilsApp;
import com.javiersantos.mlmanager.utils.UtilsUI;
import com.melnykov.fab.FloatingActionButton;
import com.pnikosis.materialishprogress.ProgressWheel;

import java.io.File;
import java.util.ArrayList;
Expand All @@ -31,7 +34,7 @@

public class MainActivity extends AppCompatActivity {
// Load Settings
AppPreferences appPreferences;
private AppPreferences appPreferences;

// General variables
private List<String> appListName = new ArrayList<String>();
Expand All @@ -47,36 +50,42 @@ public class MainActivity extends AppCompatActivity {
private List<String> appSystemListData = new ArrayList<String>();
private List<Drawable> appSystemListIcon = new ArrayList<Drawable>();

private AppAdapter appAdapter;
private AppAdapter appSystemAdapter;

// Configuration variables
private Boolean doubleBackToExitPressedOnce = false;
Toolbar toolbar;
RecyclerView recyclerView;
FloatingActionButton fab;
private Toolbar toolbar;
private Context context;
private RecyclerView recyclerView;
private FloatingActionButton fab;
private ProgressWheel progressWheel;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
this.appPreferences = new AppPreferences(getApplicationContext());
this.context = this;

setInitialConfiguration();
setAppDir();

recyclerView = (RecyclerView) findViewById(R.id.appList);
progressWheel = (ProgressWheel) findViewById(R.id.progress);

recyclerView.setHasFixedSize(true);
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
recyclerView.setLayoutManager(linearLayoutManager);

getInstalledApps();
AppAdapter appAdapter = new AppAdapter(createList(appListName, appListAPK, appListVersion, appListSource, appListData, appListIcon), this);
AppAdapter appSystemAdapter = new AppAdapter(createList(appSystemListName, appSystemListAPK, appSystemListVersion, appSystemListSource, appSystemListData, appSystemListIcon), this);

recyclerView.setAdapter(appAdapter);

setNavigationDrawer(appAdapter, appSystemAdapter, recyclerView);
setFAB();

progressWheel.setBarColor(appPreferences.getPrimaryColorPref());
progressWheel.setVisibility(View.VISIBLE);
new getInstalledApps().execute();

}

private void setInitialConfiguration() {
Expand Down Expand Up @@ -127,46 +136,70 @@ public void onShow() {
}
}

private void getInstalledApps() {
final PackageManager packageManager = getPackageManager();
List<PackageInfo> packages = packageManager.getInstalledPackages(PackageManager.GET_META_DATA);
Collections.sort(packages, new Comparator<PackageInfo>() {
@Override
public int compare(PackageInfo p1, PackageInfo p2) {
return packageManager.getApplicationLabel(p1.applicationInfo).toString().compareTo(packageManager.getApplicationLabel(p2.applicationInfo).toString());
}
});
for(PackageInfo packageInfo : packages) {
if(packageManager.getLaunchIntentForPackage(packageInfo.packageName) != null) {
// Non System Apps
Log.i("App", packageManager.getApplicationLabel(packageInfo.applicationInfo).toString());
Log.i("App", packageInfo.packageName);
Log.i("App", packageInfo.versionName);
Log.i("App", packageInfo.applicationInfo.packageName);
Log.i("App", packageInfo.applicationInfo.sourceDir);
Log.i("App", packageInfo.applicationInfo.dataDir);
appListName.add(packageManager.getApplicationLabel(packageInfo.applicationInfo).toString());
appListAPK.add(packageInfo.packageName);
appListVersion.add(packageInfo.versionName);
appListSource.add(packageInfo.applicationInfo.sourceDir);
appListData.add(packageInfo.applicationInfo.dataDir);
appListIcon.add(packageManager.getApplicationIcon(packageInfo.applicationInfo));
} else {
// System Apps
Log.i("App", packageManager.getApplicationLabel(packageInfo.applicationInfo).toString());
Log.i("App", packageInfo.packageName);
Log.i("App", packageInfo.versionName);
Log.i("App", packageInfo.applicationInfo.packageName);
Log.i("App", packageInfo.applicationInfo.sourceDir);
Log.i("App", packageInfo.applicationInfo.dataDir);
appSystemListName.add(packageManager.getApplicationLabel(packageInfo.applicationInfo).toString());
appSystemListAPK.add(packageInfo.packageName);
appSystemListVersion.add(packageInfo.versionName);
appSystemListSource.add(packageInfo.applicationInfo.sourceDir);
appSystemListData.add(packageInfo.applicationInfo.dataDir);
appSystemListIcon.add(packageManager.getApplicationIcon(packageInfo.applicationInfo));
class getInstalledApps extends AsyncTask<Void, PackageInfo, Void> {
public getInstalledApps() {}

@Override
protected Void doInBackground(Void... params) {
final PackageManager packageManager = getPackageManager();
List<PackageInfo> packages = packageManager.getInstalledPackages(PackageManager.GET_META_DATA);
Collections.sort(packages, new Comparator<PackageInfo>() {
@Override
public int compare(PackageInfo p1, PackageInfo p2) {
return packageManager.getApplicationLabel(p1.applicationInfo).toString().compareTo(packageManager.getApplicationLabel(p2.applicationInfo).toString());
}
});
for(PackageInfo packageInfo : packages) {
if(packageManager.getLaunchIntentForPackage(packageInfo.packageName) != null) {
// Non System Apps
Log.i("App", packageManager.getApplicationLabel(packageInfo.applicationInfo).toString());
Log.i("App", packageInfo.packageName);
Log.i("App", packageInfo.versionName);
Log.i("App", packageInfo.applicationInfo.packageName);
Log.i("App", packageInfo.applicationInfo.sourceDir);
Log.i("App", packageInfo.applicationInfo.dataDir);
appListName.add(packageManager.getApplicationLabel(packageInfo.applicationInfo).toString());
appListAPK.add(packageInfo.packageName);
appListVersion.add(packageInfo.versionName);
appListSource.add(packageInfo.applicationInfo.sourceDir);
appListData.add(packageInfo.applicationInfo.dataDir);
appListIcon.add(packageManager.getApplicationIcon(packageInfo.applicationInfo));
} else {
// System Apps
Log.i("App", packageManager.getApplicationLabel(packageInfo.applicationInfo).toString());
Log.i("App", packageInfo.packageName);
Log.i("App", packageInfo.versionName);
Log.i("App", packageInfo.applicationInfo.packageName);
Log.i("App", packageInfo.applicationInfo.sourceDir);
Log.i("App", packageInfo.applicationInfo.dataDir);
appSystemListName.add(packageManager.getApplicationLabel(packageInfo.applicationInfo).toString());
appSystemListAPK.add(packageInfo.packageName);
appSystemListVersion.add(packageInfo.versionName);
appSystemListSource.add(packageInfo.applicationInfo.sourceDir);
appSystemListData.add(packageInfo.applicationInfo.dataDir);
appSystemListIcon.add(packageManager.getApplicationIcon(packageInfo.applicationInfo));
}
}
return null;
}

@Override
protected void onProgressUpdate(PackageInfo... values) {
super.onProgressUpdate(values);
}

@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
appAdapter = new AppAdapter(createList(appListName, appListAPK, appListVersion, appListSource, appListData, appListIcon), context);
appSystemAdapter = new AppAdapter(createList(appSystemListName, appSystemListAPK, appSystemListVersion, appSystemListSource, appSystemListData, appSystemListIcon), context);

recyclerView.setAdapter(appAdapter);
progressWheel.setVisibility(View.GONE);

setNavigationDrawer(appAdapter, appSystemAdapter, recyclerView);
}

}

private void setAppDir() {
Expand Down
18 changes: 15 additions & 3 deletions app/src/main/java/com/javiersantos/mlmanager/utils/UtilsUI.java
Original file line number Diff line number Diff line change
Expand Up @@ -35,19 +35,31 @@ public static int darker (int color, double factor) {
int g = Color.green( color );
int b = Color.blue(color);

return Color.argb(a, Math.max( (int)(r * factor), 0 ), Math.max( (int)(g * factor), 0 ), Math.max( (int)(b * factor), 0 ) );
return Color.argb(a, Math.max((int) (r * factor), 0), Math.max((int) (g * factor), 0), Math.max((int) (b * factor), 0));
}

public static Drawer setNavigationDrawer (Activity activity, final Context context, Toolbar toolbar, final AppAdapter appAdapter, final AppAdapter appSystemAdapter, final RecyclerView recyclerView) {
int header;
appPreferences = new AppPreferences(context);
String apps, systemApps;

if (getDayOrNight() == 1) {
header = R.drawable.header_day;
} else {
header = R.drawable.header_night;
}

if (appAdapter != null) {
apps = Integer.toString(appAdapter.getItemCount());
} else {
apps = context.getResources().getString(R.string.loading);
}
if (appSystemAdapter != null) {
systemApps = Integer.toString(appSystemAdapter.getItemCount());
} else {
systemApps = context.getResources().getString(R.string.loading);
}

AccountHeader headerResult = new AccountHeaderBuilder()
.withActivity(activity)
.withHeaderBackground(header)
Expand All @@ -59,8 +71,8 @@ public static Drawer setNavigationDrawer (Activity activity, final Context conte
.withAccountHeader(headerResult)
.withStatusBarColor(UtilsUI.darker(appPreferences.getPrimaryColorPref(), 0.8))
.addDrawerItems(
new PrimaryDrawerItem().withName(context.getResources().getString(R.string.action_apps)).withIcon(FontAwesome.Icon.faw_mobile).withBadge(Integer.toString(appAdapter.getItemCount())),
new PrimaryDrawerItem().withName(context.getResources().getString(R.string.action_system_apps)).withIcon(FontAwesome.Icon.faw_android).withBadge(Integer.toString(appSystemAdapter.getItemCount())),
new PrimaryDrawerItem().withName(context.getResources().getString(R.string.action_apps)).withIcon(FontAwesome.Icon.faw_mobile).withBadge(apps),
new PrimaryDrawerItem().withName(context.getResources().getString(R.string.action_system_apps)).withIcon(FontAwesome.Icon.faw_android).withBadge(systemApps),
new DividerDrawerItem(),
new SecondaryDrawerItem().withName(context.getResources().getString(R.string.action_settings)).withIcon(FontAwesome.Icon.faw_cog),
new SecondaryDrawerItem().withName(context.getResources().getString(R.string.action_about)).withIcon(FontAwesome.Icon.faw_info)
Expand Down

0 comments on commit 1bb8e4d

Please sign in to comment.