diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e69e1e3c..d0be0403 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,5 +1,4 @@ - - - + @@ -66,12 +64,12 @@ + android:supportsRtl="true" + android:theme="@style/AppTheme"> - + - + android:launchMode="singleTask" + android:theme="@style/Theme.AppCompat.NoActionBar"> - - + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - @@ -248,112 +218,98 @@ - + android:name=".presentation.view.activity.tv.NsdActivity" + android:label="@string/app_name" + android:configChanges="keyboard|keyboardHidden|navigation" + android:theme="@style/Theme.Leanback"> - - + + + + + + - - - - - - - - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/app/src/main/java/org/mythtv/android/presentation/navigation/TvNavigator.java b/app/src/main/java/org/mythtv/android/presentation/navigation/TvNavigator.java index 64d6ee2b..e90913f2 100644 --- a/app/src/main/java/org/mythtv/android/presentation/navigation/TvNavigator.java +++ b/app/src/main/java/org/mythtv/android/presentation/navigation/TvNavigator.java @@ -23,6 +23,7 @@ import android.util.Log; import org.mythtv.android.domain.Media; +import org.mythtv.android.presentation.view.activity.tv.MainTvActivity; import org.mythtv.android.presentation.view.activity.tv.RecordingsActivity; import org.mythtv.android.presentation.view.activity.tv.SearchableActivity; import org.mythtv.android.presentation.view.activity.tv.SettingsActivity; @@ -50,6 +51,19 @@ public TvNavigator() { //empty } + public void navigateToMain( Context context ) { + Log.d( TAG, "navigateToMain : enter" ); + + if( null != context ) { + + Intent intentToLaunch = MainTvActivity.getCallingIntent( context ); + context.startActivity( intentToLaunch ); + + } + + Log.d( TAG, "navigateToMain : exit" ); + } + public void navigateToRecordings( Context context ) { Log.d( TAG, "navigateToRecordings : enter" ); diff --git a/app/src/main/java/org/mythtv/android/presentation/view/activity/phone/MainPhoneActivity.java b/app/src/main/java/org/mythtv/android/presentation/view/activity/phone/MainPhoneActivity.java index cc38ff43..de60dc39 100644 --- a/app/src/main/java/org/mythtv/android/presentation/view/activity/phone/MainPhoneActivity.java +++ b/app/src/main/java/org/mythtv/android/presentation/view/activity/phone/MainPhoneActivity.java @@ -57,7 +57,6 @@ public static Intent getCallingIntent( Context context ) { return callingIntent; } - private MediaItemListFragment recentFragment; private EncoderListFragment encodersFragment; private MediaItemListFragment upcomingFragment; diff --git a/app/src/main/java/org/mythtv/android/presentation/view/activity/phone/NsdActivity.java b/app/src/main/java/org/mythtv/android/presentation/view/activity/phone/NsdActivity.java new file mode 100644 index 00000000..c1d58492 --- /dev/null +++ b/app/src/main/java/org/mythtv/android/presentation/view/activity/phone/NsdActivity.java @@ -0,0 +1,45 @@ +package org.mythtv.android.presentation.view.activity.phone; + +import android.os.Bundle; +import android.util.Log; + +import org.mythtv.android.R; +import org.mythtv.android.presentation.view.fragment.NsdFragment; + +public class NsdActivity extends AbstractBasePhoneActivity implements NsdFragment.BackendDiscoveryListerner { + + private static final String TAG = NsdActivity.class.getSimpleName(); + + @Override + public int getLayoutResource() { + + return R.layout.activity_phone_nsd; + } + + @Override + protected void onCreate( Bundle savedInstanceState ) { + Log.d( TAG, "onCreate : enter" ); + super.onCreate( savedInstanceState ); + + Log.d( TAG, "onCreate : exit" ); + } + + @Override + public void onDiscoveryComplete() { + Log.d( TAG, "onDiscoveryComplete : enter" ); + + navigator.navigateToHome( this ); + + Log.d( TAG, "onDiscoveryComplete : exit" ); + } + + @Override + public void onDiscoveryFailed() { + Log.d( TAG, "onDiscoveryFailed : enter" ); + + navigator.navigateToHome( this ); + + Log.d( TAG, "onDiscoveryFailed : exit" ); + } + +} diff --git a/app/src/main/java/org/mythtv/android/presentation/view/activity/tv/MainTvActivity.java b/app/src/main/java/org/mythtv/android/presentation/view/activity/tv/MainTvActivity.java index 6ba58959..3f42a6ee 100644 --- a/app/src/main/java/org/mythtv/android/presentation/view/activity/tv/MainTvActivity.java +++ b/app/src/main/java/org/mythtv/android/presentation/view/activity/tv/MainTvActivity.java @@ -19,6 +19,7 @@ package org.mythtv.android.presentation.view.activity.tv; import android.content.Context; +import android.content.Intent; import android.os.Bundle; import android.preference.PreferenceManager; import android.util.Log; @@ -47,6 +48,14 @@ public class MainTvActivity extends AbstractBaseTvActivity implements HasCompone private MediaComponent mediaComponent; + public static Intent getCallingIntent( Context context ) { + + Intent callingIntent = new Intent( context, MainTvActivity.class ); + callingIntent.setFlags( Intent.FLAG_ACTIVITY_CLEAR_TOP ); + + return callingIntent; + } + @Override public int getLayoutResource() { diff --git a/app/src/main/java/org/mythtv/android/presentation/view/activity/tv/NsdActivity.java b/app/src/main/java/org/mythtv/android/presentation/view/activity/tv/NsdActivity.java new file mode 100644 index 00000000..79eaaa27 --- /dev/null +++ b/app/src/main/java/org/mythtv/android/presentation/view/activity/tv/NsdActivity.java @@ -0,0 +1,45 @@ +package org.mythtv.android.presentation.view.activity.tv; + +import android.os.Bundle; +import android.util.Log; + +import org.mythtv.android.R; +import org.mythtv.android.presentation.view.fragment.NsdFragment; + +public class NsdActivity extends AbstractBaseTvActivity implements NsdFragment.BackendDiscoveryListerner { + + private static final String TAG = NsdActivity.class.getSimpleName(); + + @Override + public int getLayoutResource() { + + return R.layout.activity_tv_nsd; + } + + @Override + protected void onCreate( Bundle savedInstanceState ) { + Log.d( TAG, "onCreate : enter" ); + super.onCreate( savedInstanceState ); + + Log.d( TAG, "onCreate : exit" ); + } + + @Override + public void onDiscoveryComplete() { + Log.d( TAG, "onDiscoveryComplete : enter" ); + + navigator.navigateToMain( this ); + + Log.d( TAG, "onDiscoveryComplete : exit" ); + } + + @Override + public void onDiscoveryFailed() { + Log.d( TAG, "onDiscoveryFailed : enter" ); + + navigator.navigateToMain( this ); + + Log.d( TAG, "onDiscoveryFailed : exit" ); + } + +} diff --git a/app/src/main/java/org/mythtv/android/presentation/view/fragment/NsdFragment.java b/app/src/main/java/org/mythtv/android/presentation/view/fragment/NsdFragment.java new file mode 100644 index 00000000..82d7b207 --- /dev/null +++ b/app/src/main/java/org/mythtv/android/presentation/view/fragment/NsdFragment.java @@ -0,0 +1,96 @@ +package org.mythtv.android.presentation.view.fragment; + +import android.app.Activity; +import android.content.Context; +import android.content.SharedPreferences; +import android.os.Bundle; +import android.support.annotation.Nullable; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import org.mythtv.android.R; +import org.mythtv.android.domain.SettingsKeys; +import org.mythtv.android.presentation.view.fragment.phone.AbstractBaseFragment; + +import it.ennova.zerxconf.ZeRXconf; +import rx.Subscription; + +/** + * A placeholder fragment containing a simple view. + */ +public class NsdFragment extends AbstractBaseFragment { + + private static final String TAG = NsdFragment.class.getSimpleName(); + + private SharedPreferences sharedPreferences; + + public interface BackendDiscoveryListerner { + + public void onDiscoveryComplete(); + + public void onDiscoveryFailed(); + } + + private BackendDiscoveryListerner listener; + + public NsdFragment() { + } + + @Override + public void onAttach( Context context ) { + super.onAttach( context ); + Log.d( TAG, "onAttach : enter" ); + + Activity activity = getActivity(); + if( activity instanceof BackendDiscoveryListerner) { + this.listener = (BackendDiscoveryListerner) activity; + } + + Log.d( TAG, "onAttach : exit" ); + } + + @Override + public View onCreateView( LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState ) { + + sharedPreferences = getSharedPreferencesComponent().sharedPreferences(); + + return inflater.inflate( R.layout.fragment_nsd, container, false ); + } + + @Override + public void onActivityCreated( @Nullable Bundle savedInstanceState ) { + Log.d( TAG, "onActivityCreated : enter" ); + super.onActivityCreated( savedInstanceState ); + + lookupBackend(); + + Log.d( TAG, "onActivityCreated : exit" ); + } + + private void lookupBackend() { + Log.d( TAG, "lookupBackend : enter" ); + + Subscription s = ZeRXconf.startDiscovery( getActivity(), "_mythbackend._tcp." ) + .subscribe( + nsdInfo -> { + Log.i( TAG, "lookupBackend : " + nsdInfo.getAddress().getHostAddress() + ":" + nsdInfo.getServicePort() ); + SharedPreferences.Editor editor = sharedPreferences.edit(); + editor.putString( SettingsKeys.KEY_PREF_BACKEND_URL, nsdInfo.getAddress().getHostAddress() ); + editor.putString( SettingsKeys.KEY_PREF_BACKEND_PORT, String.valueOf( nsdInfo.getServicePort() ) ); + editor.apply(); + + listener.onDiscoveryComplete(); + }, + e -> { + Log.e( TAG, "lookupBackend : network discovery failed", e ); + + listener.onDiscoveryFailed(); + } + ); + + Log.d( TAG, "lookupBackend : exit" ); + } + +} diff --git a/app/src/main/res/layout-sw600dp/activity_tv_nsd.xml b/app/src/main/res/layout-sw600dp/activity_tv_nsd.xml new file mode 100644 index 00000000..3108fa07 --- /dev/null +++ b/app/src/main/res/layout-sw600dp/activity_tv_nsd.xml @@ -0,0 +1,26 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_phone_nsd.xml b/app/src/main/res/layout/activity_phone_nsd.xml new file mode 100644 index 00000000..f652a4c9 --- /dev/null +++ b/app/src/main/res/layout/activity_phone_nsd.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + diff --git a/app/src/main/res/layout/content_nsd.xml b/app/src/main/res/layout/content_nsd.xml new file mode 100644 index 00000000..c42f7c35 --- /dev/null +++ b/app/src/main/res/layout/content_nsd.xml @@ -0,0 +1,9 @@ + diff --git a/app/src/main/res/layout/fragment_nsd.xml b/app/src/main/res/layout/fragment_nsd.xml new file mode 100644 index 00000000..1947f7a9 --- /dev/null +++ b/app/src/main/res/layout/fragment_nsd.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/app/src/main/res/menu/menu_nsd.xml b/app/src/main/res/menu/menu_nsd.xml new file mode 100644 index 00000000..63007bdf --- /dev/null +++ b/app/src/main/res/menu/menu_nsd.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/values-v21/styles.xml b/app/src/main/res/values-v21/styles.xml new file mode 100644 index 00000000..7abc06d3 --- /dev/null +++ b/app/src/main/res/values-v21/styles.xml @@ -0,0 +1 @@ + diff --git a/app/src/main/res/values-w820dp/dimens.xml b/app/src/main/res/values-w820dp/dimens.xml new file mode 100644 index 00000000..63fc8164 --- /dev/null +++ b/app/src/main/res/values-w820dp/dimens.xml @@ -0,0 +1,6 @@ + + + 64dp + diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index 750e9f27..906f39bc 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -1,5 +1,4 @@ - - + 16dp + 16dp \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index b25572bd..c4cf4d8b 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,5 +1,4 @@ - -