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 @@
-
-