package com.felkertech.cumulustv.plugins; import android.app.Activity; import android.content.DialogInterface; import android.content.Intent; import android.os.Bundle; import android.os.Handler; import android.os.Looper; import android.os.Message; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v17.leanback.widget.VerticalGridView; import android.support.v7.app.AlertDialog; import android.support.v7.widget.RecyclerView; import android.util.Log; import android.view.ContextThemeWrapper; import android.view.Gravity; import android.view.View; import android.view.ViewGroup; import android.view.WindowManager; import android.widget.TextView; import com.felkertech.cumulustv.model.ChannelDatabase; import com.felkertech.cumulustv.model.ChannelDatabaseFactory; import com.felkertech.cumulustv.model.JsonChannel; import com.felkertech.cumulustv.model.JsonListing; import com.felkertech.cumulustv.model.RecyclerViewItem; import com.felkertech.cumulustv.ui.RecyclerViewColumnAdapter; import com.felkertech.n.cumulustv.R; import org.json.JSONArray; import org.json.JSONException; import java.util.ArrayList; import java.util.List; /** * Created by Nick on 1/25/2017. */ public class JsonListingPanelActivity extends Activity { private static final String TAG = JsonListingPanelActivity.class.getSimpleName(); private VerticalGridView mAppLinkMenuList; private RecyclerViewItem[] items; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (getActionBar() != null) { getActionBar().hide(); } setContentView(com.felkertech.n.cumulustv.R.layout.activity_quick_settings); ((TextView) findViewById(R.id.title)).setText(getString(R.string.link_to_m3u)); // Sets the size and position of dialog activity. WindowManager.LayoutParams layoutParams = getWindow().getAttributes(); layoutParams.gravity = Gravity.END | Gravity.CENTER_VERTICAL; layoutParams.width = getResources().getDimensionPixelSize(R.dimen.side_panel_width); layoutParams.height = ViewGroup.LayoutParams.MATCH_PARENT; getWindow().setAttributes(layoutParams); refreshUi(); } @Override protected void onResume() { super.onResume(); new Handler(Looper.getMainLooper()) { @Override public void handleMessage(Message msg) { super.handleMessage(msg); refreshUi(); } }.sendEmptyMessageDelayed(0, 50); } /** * Adapter class that provides the app link menu list. */ private class AppLinkMenuAdapter extends RecyclerViewColumnAdapter { public AppLinkMenuAdapter(Activity activities, RecyclerViewItem[] quickSettings) { super(activities, quickSettings); } @Override public RecyclerView.ViewHolder createNewViewHolder(View view) { return new ViewHolder(view); } } private class ViewHolder extends RecyclerView.ViewHolder { public ViewHolder(View itemView) { super(itemView); } } private JsonListing[] getUrls() throws JSONException { final List<JsonListing> listings = new ArrayList<>(); JSONArray channelData = ChannelDatabase.getInstance(this).getJSONArray(); for (int i = 0; i < channelData.length(); i++) { ChannelDatabaseFactory.parseType(channelData.getJSONObject(i), new ChannelDatabaseFactory.ChannelParser() { @Override public void ifJsonChannel(JsonChannel entry) { } @Override public void ifJsonListing(JsonListing entry) { listings.add(entry); } }); } Log.d(TAG, listings.toString()); return listings.toArray(new JsonListing[listings.size()]); } private void showEditDialog(final JsonListing listing) { new AlertDialog.Builder(new ContextThemeWrapper(this, R.style.CompatTheme)) .setTitle(R.string.link_to_m3u) .setMessage(listing.getUrl()) .setNegativeButton(R.string.delete, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { try { Log.d(TAG, "Try deleting " + listing.toString()); ChannelDatabase.getInstance(JsonListingPanelActivity.this).delete(listing); new Handler(Looper.getMainLooper()) { @Override public void handleMessage(Message msg) { super.handleMessage(msg); refreshUi(); } }.sendEmptyMessageDelayed(0, 50); } catch (JSONException e) { e.printStackTrace(); } } }) .setPositiveButton(R.string.cancel, null) .show(); } private void refreshUi() { try { final JsonListing[] names = getUrls(); items = new RecyclerViewItem[names.length + 1]; items[0] = new RecyclerViewItem(getString(R.string.add_new_link)) { @Override public void onClick() { Intent i = new Intent(JsonListingPanelActivity.this, ListingPlugin.class); i.putExtra(CumulusTvPlugin.INTENT_EXTRA_ACTION, CumulusTvPlugin.INTENT_ADD); startActivity(i); } }; if (names.length > 0) { for (int i = 1; i < items.length; i++) { final int finalI = i; Log.d(TAG, "Poll " + finalI); items[i] = new RecyclerViewItem(names[finalI - 1].getUrl()) { @Override public void onClick() { showEditDialog(names[finalI - 1]); } }; } } } catch (JSONException e) { e.printStackTrace(); } mAppLinkMenuList = (VerticalGridView) findViewById(R.id.list); mAppLinkMenuList.setAdapter(new AppLinkMenuAdapter(this, items)); } }