Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added d-pad functionalities to the ATV #259

Merged
merged 4 commits into from
Aug 14, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ android:
- platform-tools
- build-tools-25.0.2
- android-25
- android-19
- extra-android-support
- extra-android-m2repository
- extra-google-m2repository
Expand Down
26 changes: 21 additions & 5 deletions src/main/java/org/amahi/anywhere/tv/activity/MainTVActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,6 @@
import org.amahi.anywhere.activity.NavigationActivity;
import org.amahi.anywhere.server.model.Server;
import org.amahi.anywhere.tv.fragment.MainTVFragment;
import org.amahi.anywhere.util.Preferences;

import java.util.ArrayList;

Expand All @@ -37,19 +36,36 @@ public class MainTVActivity extends Activity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_tv);
if(getServers()!=null)
getFragmentManager().beginTransaction().add(R.id.main_tv_fragment_container, new MainTVFragment()).commit();
else
startActivity(new Intent(this, NavigationActivity.class));
checkAndLaunch();
}

private void checkAndLaunch() {
if (getServers() != null) {
replaceFragment();
} else {
launchNav();
}
}

private ArrayList<Server> getServers() {
return getIntent().getParcelableArrayListExtra(getString(R.string.intent_servers));
}

private void replaceFragment() {
getFragmentManager().beginTransaction().add(R.id.main_tv_fragment_container, new MainTVFragment()).commit();
}

private void launchNav() {
startActivity(new Intent(this, NavigationActivity.class));
}

@Override
public void onBackPressed() {
super.onBackPressed();
startHomeIntent();
}

private void startHomeIntent() {
Intent homeIntent = new Intent(Intent.ACTION_MAIN);
homeIntent.addCategory(Intent.CATEGORY_HOME);
homeIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@
import org.amahi.anywhere.server.model.ServerFile;
import org.amahi.anywhere.server.model.ServerShare;
import org.amahi.anywhere.tv.fragment.ServerFileTvFragment;
import org.amahi.anywhere.util.Fragments;
import org.amahi.anywhere.util.Intents;

import java.util.List;
Expand All @@ -47,16 +48,7 @@ protected void onCreate(@Nullable Bundle savedInstanceState) {
}

private void setFirstFragment() {
getFragmentManager().beginTransaction().add(R.id.server_file_tv_container, buildFirstTvFragment()).commit();
}

private Fragment buildFirstTvFragment() {
Fragment fragment = new ServerFileTvFragment();
Bundle bundle = new Bundle();
bundle.putParcelable(Intents.Extras.SERVER_FILE, getServerFile());
bundle.putParcelable(Intents.Extras.SERVER_SHARE, getServerShare());
fragment.setArguments(bundle);
return fragment;
getFragmentManager().beginTransaction().add(R.id.server_file_tv_container, Fragments.Builder.buildFirstTvFragment(getServerFile(), getServerShare())).commit();
}

private ServerFile getServerFile() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,12 @@

import android.app.Activity;
import android.app.Fragment;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.annotation.RequiresApi;
import android.support.v17.leanback.widget.PlaybackControlsRow;
import android.view.KeyEvent;

import org.amahi.anywhere.AmahiApplication;
import org.amahi.anywhere.R;
Expand All @@ -17,42 +21,61 @@

import javax.inject.Inject;

import static org.amahi.anywhere.util.Fragments.Builder.buildAudioFragment;

public class TvPlaybackAudioActivity extends Activity {

@Inject
ServerClient serverClient;

Fragment fragment;

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_tv_audio_playback);
setUpInjections();
getFragmentManager().beginTransaction().replace(R.id.playback_controls_fragment_container, buildAudioFragment()).commit();
fragment = buildAudioFragment(getFile(), getShare(), getFiles());
replaceFragment();
}

private void setUpInjections() {
AmahiApplication.from(this).inject(this);
}

private Fragment buildAudioFragment(){
Fragment fragment = new TvPlaybackAudioFragment();
Bundle bundle = new Bundle();
bundle.putParcelable(Intents.Extras.SERVER_SHARE,getShare());
bundle.putParcelable(Intents.Extras.SERVER_FILE,getFile());
bundle.putParcelableArrayList(Intents.Extras.SERVER_FILES,getFiles());
fragment.setArguments(bundle);
return fragment;
private void replaceFragment() {
getFragmentManager().beginTransaction().replace(R.id.playback_controls_fragment_container, fragment).commit();
}

private ServerShare getShare(){
private ServerShare getShare() {
return getIntent().getParcelableExtra(Intents.Extras.SERVER_SHARE);
}

private ServerFile getFile(){
private ServerFile getFile() {
return getIntent().getParcelableExtra(Intents.Extras.SERVER_FILE);
}

private ArrayList<ServerFile> getFiles(){
private ArrayList<ServerFile> getFiles() {
return getIntent().getParcelableArrayListExtra(Intents.Extras.SERVER_FILES);
}

@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
switch (keyCode) {
case KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE:
PlaybackControlsRow.PlayPauseAction playPauseAction = ((TvPlaybackAudioFragment) fragment).getmPlayPauseAction();
((TvPlaybackAudioFragment) fragment).togglePlayPause(playPauseAction.getIndex() == PlaybackControlsRow.PlayPauseAction.PAUSE);
break;

case KeyEvent.KEYCODE_MEDIA_REWIND:
((TvPlaybackAudioFragment) fragment).rewind();
break;

case KeyEvent.KEYCODE_MEDIA_FAST_FORWARD:
((TvPlaybackAudioFragment) fragment).fastForward();
break;
}
return super.onKeyDown(keyCode, event);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,25 +20,30 @@
package org.amahi.anywhere.tv.activity;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.Fragment;
import android.content.Intent;
import android.content.DialogInterface;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.annotation.RequiresApi;
import android.support.v17.leanback.widget.PlaybackControlsRow;
import android.view.KeyEvent;

import org.amahi.anywhere.AmahiApplication;
import org.amahi.anywhere.R;
import org.amahi.anywhere.server.client.ServerClient;
import org.amahi.anywhere.server.model.ServerFile;
import org.amahi.anywhere.server.model.ServerShare;
import org.amahi.anywhere.tv.fragment.TvPlaybackAudioFragment;
import org.amahi.anywhere.tv.fragment.TvPlaybackVideoFragment;
import org.amahi.anywhere.util.Intents;

import java.util.ArrayList;

import javax.inject.Inject;

import static org.amahi.anywhere.util.Fragments.Builder.buildVideoFragment;

public class TvPlaybackVideoActivity extends Activity {

@Inject
Expand All @@ -51,54 +56,86 @@ protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_tv_video_playback);
setUpInjections();
fragment = buildAudioFragment();
getFragmentManager().beginTransaction().replace(R.id.playback_controls_fragment_container, fragment).commit();
fragment = buildVideoFragment(getFile(), getShare(), getFiles());
replaceFragment();
}

private void setUpInjections() {
AmahiApplication.from(this).inject(this);
}

private Fragment buildAudioFragment(){
Fragment fragment = new TvPlaybackVideoFragment();
Bundle bundle = new Bundle();
bundle.putParcelable(Intents.Extras.SERVER_SHARE,getShare());
bundle.putParcelable(Intents.Extras.SERVER_FILE,getFile());
bundle.putParcelableArrayList(Intents.Extras.SERVER_FILES,getFiles());
fragment.setArguments(bundle);
return fragment;
private void replaceFragment() {
getFragmentManager().beginTransaction().replace(R.id.playback_controls_fragment_container, fragment).commit();
}

private ServerShare getShare(){
private ServerShare getShare() {
return getIntent().getParcelableExtra(Intents.Extras.SERVER_SHARE);
}

private ServerFile getFile(){
private ServerFile getFile() {
return getIntent().getParcelableExtra(Intents.Extras.SERVER_FILE);
}

private ArrayList<ServerFile> getFiles(){
private ArrayList<ServerFile> getFiles() {
return getIntent().getParcelableArrayListExtra(Intents.Extras.SERVER_FILES);
}

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
switch (keyCode){
case KeyEvent.KEYCODE_MEDIA_REWIND:
((TvPlaybackVideoFragment)fragment).rewind();
switch (keyCode) {
case KeyEvent.KEYCODE_DPAD_LEFT:
Object savedState = ((TvPlaybackVideoFragment) fragment).getmSavedState();
if (savedState instanceof PlaybackControlsRow.RewindAction)
((TvPlaybackVideoFragment) fragment).rewind();
break;
case KeyEvent.KEYCODE_MEDIA_FAST_FORWARD:
((TvPlaybackVideoFragment)fragment).fastForward();

case KeyEvent.KEYCODE_DPAD_RIGHT:
savedState = ((TvPlaybackVideoFragment) fragment).getmSavedState();
if (savedState instanceof PlaybackControlsRow.FastForwardAction)
((TvPlaybackVideoFragment) fragment).fastForward();
break;
case KeyEvent.KEYCODE_MEDIA_NEXT:
((TvPlaybackVideoFragment)fragment).skipNext();

case KeyEvent.KEYCODE_MEDIA_REWIND:
((TvPlaybackVideoFragment) fragment).rewind();
break;
case KeyEvent.KEYCODE_MEDIA_PREVIOUS:
((TvPlaybackVideoFragment)fragment).skipPrevious();

case KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE:
playPause();
break;

default:
break;
}
return super.onKeyDown(keyCode, event);
}
}

private void playPause() {
PlaybackControlsRow.PlayPauseAction pauseAction = ((TvPlaybackVideoFragment) fragment).getmPlayPauseAction();
((TvPlaybackVideoFragment) fragment).togglePlayPause(pauseAction.getIndex() == PlaybackControlsRow.PlayPauseAction.PAUSE);
}

@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
@Override
public void onBackPressed() {
AlertDialog.Builder builder;
builder = new AlertDialog.Builder(this, android.R.style.Theme_Material_Dialog_Alert);

if (((TvPlaybackVideoFragment) fragment).getmPlayPauseAction().getIndex() == PlaybackControlsRow.PlayPauseAction.PAUSE)
playPause();

builder.setTitle(getString(R.string.exit_title))
.setMessage(getString(R.string.exit_message))
.setPositiveButton(getString(R.string.yes), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
TvPlaybackVideoActivity.super.onBackPressed();
}
})
.setNegativeButton(getString(R.string.no), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
}).show();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -40,10 +40,10 @@
public class ConnectionFragment extends GuidedStepFragment {

private static final int OPTION_CHECK_SET_ID = 10;
private static final int ACTION_BACK = 1;
private ArrayList<String> OPTION_NAMES = new ArrayList<>();
private ArrayList<String> OPTION_DESCRIPTIONS = new ArrayList<>();
private ArrayList<Boolean> OPTION_CHECKED = new ArrayList<>();

private Context mContext;
private SharedPreferences preference;
private String initialSelected;
Expand All @@ -70,7 +70,6 @@ public GuidanceStylist.Guidance onCreateGuidance(Bundle savedInstanceState) {
ContextCompat.getDrawable(getActivity(), R.drawable.ic_app_logo_shadowless));
}


@Override
public void onCreateActions(@NonNull List<GuidedAction> actions, Bundle savedInstanceState) {
setTitle(actions);
Expand All @@ -86,7 +85,6 @@ public void onCreateActions(@NonNull List<GuidedAction> actions, Bundle savedIns
markSelected(selected);

setCheckedActionButtons(actions);

}

private void setTitle(List<GuidedAction> actions) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -197,7 +197,7 @@ private void prepareAudio(){
}

@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
private void togglePlayPause(boolean isPaused) {
public void togglePlayPause(boolean isPaused) {
if (isPaused) {
mediaPlayer.pause();
} else {
Expand All @@ -206,14 +206,14 @@ private void togglePlayPause(boolean isPaused) {
playbackStateChanged();
}

private void rewind() {
public void rewind() {
if (mediaPlayer.getCurrentPosition() - (10 * 1000) > 0) {
mediaPlayer.seekTo(mediaPlayer.getCurrentPosition() - (10 * 1000));
mPlaybackControlsRow.setCurrentTime(mediaPlayer.getCurrentPosition());
}
}

private void fastForward() {
public void fastForward() {
if (mediaPlayer.getCurrentPosition() + (10 * 1000) <= mediaPlayer.getDuration()) {
mediaPlayer.seekTo(mediaPlayer.getCurrentPosition() + (10 * 1000));
mPlaybackControlsRow.setCurrentTime(mediaPlayer.getCurrentPosition());
Expand Down Expand Up @@ -415,4 +415,8 @@ public void onDestroy() {
mediaPlayer.release();
mediaPlayer = null;
}

public PlaybackControlsRow.PlayPauseAction getmPlayPauseAction() {
return mPlayPauseAction;
}
}
Loading