Skip to content
Snippets Groups Projects
Commit 21ecf477 authored by Geoffrey Métais's avatar Geoffrey Métais
Browse files

Fix logging on Android 8+

parent 8c06d0c2
No related branches found
No related tags found
No related merge requests found
......@@ -32,10 +32,11 @@ import android.os.IBinder;
import android.os.Looper;
import android.os.RemoteCallbackList;
import android.os.RemoteException;
import androidx.core.app.NotificationCompat;
import android.text.format.DateFormat;
import org.videolan.libvlc.util.AndroidUtil;
import org.videolan.vlc.gui.DebugLogActivity;
import org.videolan.vlc.gui.helpers.NotificationHelper;
import org.videolan.vlc.util.AndroidDevices;
import org.videolan.vlc.util.Logcat;
import org.videolan.vlc.util.Util;
......@@ -48,6 +49,8 @@ import java.io.OutputStreamWriter;
import java.util.LinkedList;
import java.util.List;
import androidx.core.app.NotificationCompat;
public class DebugLogService extends Service implements Logcat.Callback, Runnable {
private static final int MSG_STARTED = 0;
......@@ -129,8 +132,7 @@ public class DebugLogService extends Service implements Logcat.Callback, Runnabl
}
public synchronized void start() {
if (mLogcat != null)
return;
if (mLogcat != null) return;
clear();
mLogcat = new Logcat();
mLogcat.start(this);
......@@ -140,7 +142,7 @@ public class DebugLogService extends Service implements Logcat.Callback, Runnabl
debugLogIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP|Intent.FLAG_ACTIVITY_CLEAR_TOP);
final PendingIntent pi = PendingIntent.getActivity(this, 0, debugLogIntent, 0);
final NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
final NotificationCompat.Builder builder = new NotificationCompat.Builder(this, NotificationHelper.VLC_DEBUG_CHANNEL);
builder.setContentTitle(getResources().getString(R.string.log_service_title));
builder.setContentText(getResources().getString(R.string.log_service_text));
builder.setSmallIcon(R.drawable.ic_stat_vlc);
......@@ -186,6 +188,7 @@ public class DebugLogService extends Service implements Logcat.Callback, Runnabl
}
}
} catch (FileNotFoundException e) {
saved = false;
} catch (IOException ioe) {
saved = false;
......@@ -317,6 +320,7 @@ public class DebugLogService extends Service implements Logcat.Callback, Runnabl
synchronized (this) {
if (mIDebugLogService != null) {
try {
if (AndroidUtil.isOOrLater) NotificationHelper.createDebugServcieChannel(mContext.getApplicationContext());
mIDebugLogService.start();
return true;
} catch (RemoteException e) {
......
......@@ -20,22 +20,27 @@
*****************************************************************************/
package org.videolan.vlc.gui;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import com.google.android.material.snackbar.Snackbar;
import org.videolan.libvlc.util.AndroidUtil;
import org.videolan.vlc.DebugLogService;
import org.videolan.vlc.R;
import org.videolan.vlc.VLCApplication;
import org.videolan.vlc.gui.helpers.UiTools;
import org.videolan.vlc.util.Permissions;
import java.util.ArrayList;
import java.util.List;
public class DebugLogActivity extends Activity implements DebugLogService.Client.Callback {
import androidx.fragment.app.FragmentActivity;
public class DebugLogActivity extends FragmentActivity implements DebugLogService.Client.Callback {
public final static String TAG = "VLC/DebugLogActivity";
private DebugLogService.Client mClient = null;
private Button mStartButton = null;
......@@ -52,12 +57,12 @@ public class DebugLogActivity extends Activity implements DebugLogService.Client
super.onCreate(savedInstanceState);
setContentView(R.layout.debug_log);
mStartButton = (Button)findViewById(R.id.start_log);
mStopButton = (Button)findViewById(R.id.stop_log);
mLogView = (ListView) findViewById(R.id.log_list);
mCopyButton = (Button)findViewById(R.id.copy_to_clipboard);
mClearButton = (Button)findViewById(R.id.clear_log);
mSaveButton = (Button)findViewById(R.id.save_to_file);
mStartButton = findViewById(R.id.start_log);
mStopButton = findViewById(R.id.stop_log);
mLogView = findViewById(R.id.log_list);
mCopyButton = findViewById(R.id.copy_to_clipboard);
mClearButton = findViewById(R.id.clear_log);
mSaveButton = findViewById(R.id.save_to_file);
mClient = new DebugLogService.Client(this, this);
......@@ -118,7 +123,13 @@ public class DebugLogActivity extends Activity implements DebugLogService.Client
private View.OnClickListener mSaveClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
mClient.save();
if (AndroidUtil.isOOrLater && !Permissions.canWriteStorage()) Permissions.askWriteStoragePermission(DebugLogActivity.this, false, new Runnable() {
@Override
public void run() {
mClient.save();
}
});
else mClient.save();
}
};
......@@ -143,8 +154,8 @@ public class DebugLogActivity extends Activity implements DebugLogService.Client
mStopButton.setEnabled(true);
if (logList.size() > 0)
setOptionsButtonsEnabled(true);
mLogList = new ArrayList<String>(logList);
mLogAdapter = new ArrayAdapter<String>(this, R.layout.debug_log_item, mLogList);
mLogList = new ArrayList<>(logList);
mLogAdapter = new ArrayAdapter<>(this, R.layout.debug_log_item, mLogList);
mLogView.setAdapter(mLogAdapter);
mLogView.setTranscriptMode(ListView.TRANSCRIPT_MODE_NORMAL);
if (mLogList.size() > 0)
......@@ -169,9 +180,9 @@ public class DebugLogActivity extends Activity implements DebugLogService.Client
@Override
public void onSaved(boolean success, String path) {
if (success) {
UiTools.snacker(getWindow().getDecorView().findViewById(android.R.id.content), String.format(
Snackbar.make(mLogView, String.format(
VLCApplication.getAppResources().getString(R.string.dump_logcat_success),
path));
path), Snackbar.LENGTH_LONG).show();
} else {
UiTools.snacker(getWindow().getDecorView().findViewById(android.R.id.content), R.string.dump_logcat_failure);
}
......
......@@ -28,9 +28,6 @@ import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.os.Build;
import androidx.annotation.RequiresApi;
import androidx.core.app.NotificationCompat;
import androidx.media.session.MediaButtonReceiver;
import android.support.v4.media.session.MediaSessionCompat;
import android.support.v4.media.session.PlaybackStateCompat;
......@@ -38,6 +35,10 @@ import org.videolan.vlc.R;
import org.videolan.vlc.StartActivity;
import org.videolan.vlc.util.AndroidDevices;
import androidx.annotation.RequiresApi;
import androidx.core.app.NotificationCompat;
import androidx.media.session.MediaButtonReceiver;
import static org.videolan.vlc.util.Constants.ACTION_PAUSE_SCAN;
import static org.videolan.vlc.util.Constants.ACTION_RESUME_SCAN;
import static org.videolan.vlc.util.Util.getMediaDescription;
......@@ -46,6 +47,7 @@ public class NotificationHelper {
public final static String TAG = "VLC/NotificationHelper";
private final static StringBuilder sb = new StringBuilder();
public static final String VLC_DEBUG_CHANNEL = "vlc_debug";
public static Notification createPlaybackNotification(Context ctx, boolean video, String title, String artist,
String album, Bitmap cover, boolean playing,
......@@ -150,4 +152,15 @@ public class NotificationHelper {
notificationManager.createNotificationChannel(channel);
}
}
@RequiresApi(api = Build.VERSION_CODES.O)
public static void createDebugServcieChannel(Context appCtx) {
final NotificationManager notificationManager = (NotificationManager) appCtx.getSystemService(Context.NOTIFICATION_SERVICE);
if (notificationManager == null) return;
// Playback channel
final CharSequence name = appCtx.getString(R.string.debug_logs);
final NotificationChannel channel = new NotificationChannel(VLC_DEBUG_CHANNEL, name, NotificationManager.IMPORTANCE_LOW);
channel.setLockscreenVisibility(Notification.VISIBILITY_PUBLIC);
notificationManager.createNotificationChannel(channel);
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment