package tv.piratemedia.lightcontroler.api; import android.content.Context; import android.content.SharedPreferences; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.database.DataSetObserver; import android.graphics.drawable.Drawable; import android.net.Uri; import android.os.Build; import android.os.Bundle; import android.preference.PreferenceManager; import android.support.annotation.NonNull; import android.support.v7.app.ActionBarActivity; import android.support.v7.widget.Toolbar; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.ImageView; import android.widget.ListAdapter; import android.widget.ListView; import android.widget.TextView; import com.afollestad.materialdialogs.DialogAction; import com.afollestad.materialdialogs.MaterialDialog; import java.util.HashSet; import java.util.Set; import tv.piratemedia.lightcontroler.R; public class APIPermissionManager extends ActionBarActivity { private SharedPreferences prefs; private ListView PermsList; private ListAdapter PermsAdapter; private Set<String> enabled; private Toolbar mActionBarToolbar; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.api_permission_manager); prefs = PreferenceManager.getDefaultSharedPreferences(this); PermsList = (ListView) findViewById(R.id.permission_list); if(Build.VERSION.SDK_INT == 21) { getWindow().setStatusBarColor(getResources().getColor(R.color.colorPrimaryDark)); } mActionBarToolbar = (Toolbar) findViewById(R.id.toolbar_actionbar); setSupportActionBar(mActionBarToolbar); mActionBarToolbar.setNavigationIcon(R.drawable.ic_ab_back_material); mActionBarToolbar.setNavigationOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { APIPermissionManager.this.finish(); } }); } @Override protected void onResume() { super.onResume(); enabled = prefs.getStringSet("enabled_api_apps", new HashSet<String>()); setUpAdapter(); final Context _this = this; PermsList.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { final Application a = (Application)PermsAdapter.getItem(position); new MaterialDialog.Builder(_this) .title("Remove Permission") .content("Remove API Permission for '"+a.Name+"'?") .cancelable(true) .onPositive(new MaterialDialog.SingleButtonCallback() { @Override public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) { enabled.remove(a.pkg); setUpAdapter(); prefs.getStringSet("enabled_api_apps", enabled); _this.getContentResolver().notifyChange(Uri.parse("content://tv.piratemedia.lightcontroler.api/permission"), null); } }) .positiveText("Remove") .negativeText("Cancel") .build() .show(); } }); } private void setUpAdapter() { final Context _this = this; PermsAdapter = new ListAdapter() { ViewHolder holder; @Override public boolean areAllItemsEnabled() { return true; } @Override public boolean isEnabled(int position) { return true; } @Override public void registerDataSetObserver(DataSetObserver observer) { } @Override public void unregisterDataSetObserver(DataSetObserver observer) { } @Override public int getCount() { return enabled.size(); } @Override public Application getItem(int position) { Application item = new Application(); item.pkg = (String) enabled.toArray()[position]; final PackageManager pm = _this.getPackageManager(); ApplicationInfo ai; try { ai = pm.getApplicationInfo(item.pkg, 0); } catch (final PackageManager.NameNotFoundException e) { ai = null; } if(ai != null) { item.Icon = pm.getApplicationIcon(ai); item.Name = (String) pm.getApplicationLabel(ai); } return item; } @Override public long getItemId(int position) { return 0; } @Override public boolean hasStableIds() { return false; } @Override public View getView(int position, View convertView, ViewGroup parent) { Application item = getItem(position); if (convertView == null) { LayoutInflater inflater = (LayoutInflater) _this .getSystemService(Context.LAYOUT_INFLATER_SERVICE); convertView = inflater.inflate(R.layout.permission_item, null); holder = new ViewHolder(); holder.name = (TextView) convertView.findViewById(R.id.app_name); holder.pkg = (TextView) convertView.findViewById(R.id.pkg_id); holder.icon = (ImageView) convertView.findViewById(R.id.app_icon); if(item.Name != null) { holder.name.setText(item.Name); } else { holder.name.setText("App Not Installed"); } holder.pkg.setText(item.pkg); if(item.Icon != null) { holder.icon.setImageDrawable(item.Icon); } convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); holder.name.setText(item.Name); holder.pkg.setText(item.pkg); holder.icon.setImageDrawable(item.Icon); } return convertView; } @Override public int getItemViewType(int position) { return 1; } @Override public int getViewTypeCount() { return 1; } @Override public boolean isEmpty() { return false; } }; PermsList.setAdapter(PermsAdapter); } class Application { public String pkg = null; public String Name = null; public Drawable Icon = null; } public static class ViewHolder { public TextView name; public TextView pkg; public ImageView icon; } }